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. 最后判断是否有进位,如果有则在结果链表的末尾添加一个新节点。