LeetCode-C#-0002.两数相加
发布人:shili8
发布时间:2024-01-06 22:33
阅读次数:72
题目描述:
给定两个非空链表,表示两个非负整数。数字以相反的顺序存储,每个节点包含一个数字。将这两个数字相加并以链表的形式返回。
示例:
输入:(2 ->4 ->3) + (5 ->6 ->4)
输出:7 ->0 ->8解释:342 +465 =807代码示例:
csharppublic class ListNode {
public int val;
public ListNode next;
public ListNode(int val=0, ListNode next=null) {
this.val = val;
this.next = next;
}
}
public class Solution {
public ListNode AddTwoNumbers(ListNode l1, ListNode l2) {
ListNode dummyHead = new ListNode(0);
ListNode p = l1, q = l2, curr = dummyHead;
int carry =0;
while (p != null || q != null) {
int x = (p != null) ? p.val :0;
int y = (q != null) ? q.val :0;
int sum = carry + x + y;
carry = sum /10;
curr.next = new ListNode(sum %10);
curr = curr.next;
if (p != null) p = p.next;
if (q != null) q = q.next;
}
if (carry >0) {
curr.next = new ListNode(carry);
}
return dummyHead.next;
}
}
代码注释:
1. 定义了一个ListNode类,用于表示链表节点。
2. 定义了一个Solution类,其中包含了AddTwoNumbers方法,用于实现两数相加的功能。
3. 在AddTwoNumbers方法中,使用了dummyHead节点作为结果链表的头节点,curr节点用于遍历结果链表,carry用于记录进位。
4. 使用while循环遍历两个输入链表,同时进行相加操作,并将结果存储在新的链表中。
5. 最后判断是否有进位,如果有则在结果链表的末尾添加一个新节点。

