首页
登录 | 注册

LeetCode Problem:链表相加

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

 

思路:遍历链表即可。

需要注意的两点:

1) 相加到10之后会进位,需要保留这个进位

2) 如果是最后一位加完还有进位,那么会再新建一个节点

 

程序如下:

public class LinkedListAddition {
	public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
		ListNode l3 = new ListNode(0);
		ListNode head = l3;
		if(l1==null){
			return l2;
		}
		if(l2==null){
			return l1;
		}
		int val = 0;
		int advance = 0;
		while(l1!=null && l2!=null){
			val = l1.val + l2.val + advance;
			if(val >= 10){
				val =val - 10;
				advance = 1;
			}else{
				advance = 0;
			}
			ListNode node = new ListNode(val);
			node.next = null;
			l3.next = node;
			l3 = l3.next;
			
			l1 = l1.next;
			l2 = l2.next;
		}
		if(l1 == null && l2 == null && advance == 1){
			ListNode last = new ListNode(advance);
			last.next = null;
			l3.next = last;
		}
		if(l1 !=null){
			l3.next = l1;
			addAdvance(l1,advance);
		}else if (l2 != null){
			l3.next = l2;
			addAdvance(l2,advance);
		}
		return head.next;
	}

	public static void addAdvance(ListNode l,int advance){
		if(l == null){
			return;
		}
		ListNode pre = l;
		while(l != null){
			l.val = l.val + advance;
			if(l.val >=10){
				l.val = l.val - 10;
			}else{
				advance = 0;
			}
			pre = l;
			l = l.next;
		}
		if(advance == 1){
			ListNode last = new ListNode(advance);
			last.next = null;
			pre.next = last;
		}
	}
	static class ListNode {
		int val;
		ListNode next;

		ListNode(int x) {
			val = x;
			next = null;
		}
	}
}

 



2020 jeepxie.net webmaster#jeepxie.net
10 q. 0.008 s.
京ICP备10005923号