leecode第二题。
首先要知道单链表的特性。
单链表中的节点应该具有两个属性:val
和 next
。val
是当前节点的值,next
是指向下一个节点的指针/引用。
在链表类中实现这些功能:
-
get(index):获取链表中第
index
个节点的值。如果索引无效,则返回-1
。 -
addAtHead(val):在链表的第一个元素之前添加一个值为
val
的节点。插入后,新节点将成为链表的第一个节点。 -
addAtTail(val):将值为
val
的节点追加到链表的最后一个元素。 -
addAtIndex(index,val):在链表中的第
index
个节点之前添加值为val
的节点。如果index
等于链表的长度,则该节点将附加到链表的末尾。如果index
大于链表长度,则不会插入节点。 -
deleteAtIndex(index):如果索引
index
有效,则删除链表中的第index
个节点。
然后分析需求编写代码。
/**
* 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 sum = new ListNode();
ListNode temp = l1;
ListNode tempSum = sum;
while (null != temp.next) {
if(null == tempSum.next) {
tempSum.next = new ListNode();
}
tempSum.val += temp.val;
tempSum = tempSum.next;
temp = temp.next;
}
tempSum.val =temp.val;
temp = l2;
tempSum = sum;
while (null != temp.next) {
if(null ==tempSum.next) {
tempSum.next = new ListNode();
}
tempSum.val += temp.val;
tempSum = tempSum.next;
temp = temp.next;
}
tempSum.val += temp.val;
tempSum = sum;
while (null != tempSum.next) {
if(tempSum.val>9) {
int x = tempSum.val;
tempSum.val=x%10;
tempSum.next.val += 1;
}
tempSum = tempSum.next;
}
if(tempSum.val>9) {
int x = tempSum.val;
tempSum.val = x % 10;
tempSum.next = new ListNode();
tempSum.next.val +=1;
}
return sum;
}
}