Add Two Numbers (c#)
You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
简单来说就是将两个单个数字的单链表相加,但是这个有一个问题,如果两个数字相加大于等于10,则将和的个位保留到此节点,下个节点多加1;
链表长度不限,且可以为空(一个链表或者两个同时为空)。
由于我是小白,做这道题时链表基本不懂,所以就直接参考了优秀解法。。。
public class ListNode { public int val; public ListNode next; public ListNode(int x) { val = x; } } public ListNode AddTwoNumbers(ListNode l1, ListNode l2) { ListNode c1 = l1; ListNode c2 = l2; ListNode head = new ListNode(0); ListNode p = head; int sum = 0; while (c1!=null ||c2!=null ) { sum /= 10; if (c1!=null) { sum += c1.val; c1 = c1.next; } if (c2!=null) { sum += c2.val; c2 = c2.next; } p.next = new ListNode(sum % 10); p = p.next; } if (sum/10==1) { p.next = new ListNode(1); } return head.next; }
我的理解:先声明一个空的头节点head,循环将2个链表的头节点加给值sum,并将sum除以10的余数赋值给之前申明的空节点p,加完之后再将链表的下个节点加给sum除以10的值,直到链表没有下一个节点位置,同时p指向下一节点。
当sum为10时,p的下一个节点值为1。
posted on 2016-01-06 21:25 _david李dvd 阅读(327) 评论(0) 收藏 举报
浙公网安备 33010602011771号