1. 程式人生 > >5.合併兩個有序連結串列

5.合併兩個有序連結串列

題:將兩個有序連結串列合併為一個新的有序連結串列並返回。新連結串列是通過拼接給定的兩個連結串列的所有節點組成的。 

示例:

輸入:1->2->4, 1->3->4
輸出:1->1->2->3->4->4

程式碼:

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

 public static ListNode mergeTwoLists(ListNode l1, ListNode l2) {
	if (l1 == null && l2 == null) {
		return null;
	} else if (l1 == null && l2 != null) {
		return l2;
	} else if (l1 != null && l2 == null) {
		return l1;
	}

	// 都不為空
	ListNode tmpL1 = l1;
	ListNode tmpL2 = l2;
	ListNode result = new ListNode(0);
	ListNode p = result;

	while (tmpL1 != null && tmpL2 != null) {
		if (tmpL1.val <= tmpL2.val) {
			p.next = tmpL1;
			p = p.next;
			tmpL1 = tmpL1.next;
		} else {
			p.next = tmpL2;
			p = p.next;
			tmpL2 = tmpL2.next;
		}
	}

	if (tmpL1 == null) {
		p.next = tmpL2;
	} else if (tmpL2 == null) {
		p.next = tmpL1;
	}

	return result = result.next;
}