当前位置:网站首页>【LeetCode】链表相加 进位
【LeetCode】链表相加 进位
2022-08-02 03:33:00 【EvilChou】

/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode pre = new ListNode(0); //开辟新的内存空间,pre指向该内存空间,pre是该结果链表的头节点
ListNode cur = pre; //定义一个可移动的指针,也指向该内存空间,后续添加节点依赖该指针
int carry = 0; //进位
while(l1!=null || l2!=null){
int x = l1 != null ? l1.val : 0; //获取对应位置上的值,如果某个位置上为空,则赋值为0
int y = l2 != null ? l2.val : 0;
int sum = x + y + carry; //l1和l2对应位置上的值以及进位的值相加
carry = sum / 10; //获取每次相加后的进位
sum = sum % 10; //获取进位后的值
cur.next = new ListNode(sum); //创建一个新的节点,该节点的值为相加进位后的值,并且结果链表的指针指向该节点
cur = cur.next; //结果链表指针向前移动,pre头指针没有动
if(l1!= null){
l1 = l1.next;
}
if(l2!= null){
l2 = l2.next;
}
}
if(carry == 1){
cur.next = new ListNode(carry); //如果最后加完后还有进位(进位值一定为1),则创建新的节点,保存该节点
}
return pre.next;//返回结果链表,因为pre指向该链表头指针,头指针处的值为0,头指针的下一个节点才是结果链表的首元节点
}
}开辟新的链表空间 ListNode pre = new ListNode(0) pre为头节点指针

最后返回的是return pre.next pre.next指向结果链表的首元节点
不使用头结点,直接返回结果链表方法

边栏推荐
猜你喜欢
随机推荐
同时求最大值与最小值(看似简单却值得思考~)
TC358860XBG BGA65 东芝桥接芯片 HDMI转MIPI
How to remotely debug PLC?
读取FBX文件踩坑清单
本地数据库 sqlite3 编译和使用
AD PCB导出Gerber文件(非常详细的步骤)
TeamCode 产品 UI 全新升级,快来体验吧
【数据库】事务的四大特性<详解>
LL(1)文法 :解决 if-else/if-else 产生式二义性问题
uniCloud address book combat
GM8775C规格书,MIPI转LVDS,MIPI转双路LVDS分享
IDEA2021.2安装与配置(持续更新)
D类音频功放NS4110B电路设计
Lightly 支持 Markdown 文件在线编写(文中提供详细 Markdown 语法)
倍福ET2000侦听器使用
MPU6050 accelerometer and gyroscope sensor is connected with the Arduino
NE5532运放加法器
GM7150 CVBS转BT656视频解码芯片详细内容及设计要求
AD8361检波器
bluez5.50蓝牙文件传输









![开源日志库 [log4c] 使用](/img/f5/cce26f5820155c537f2cd975bafbcd.png)