1. 程式人生 > 其它 >劍指 Offer 25. 合併兩個排序的連結串列——最快的解法

劍指 Offer 25. 合併兩個排序的連結串列——最快的解法

技術標籤:劍指offer單鏈表資料結構

原題連結

題目描述

輸入兩個遞增排序的連結串列,合併這兩個連結串列並使新連結串列中的節點仍然是遞增排序的。

示例1

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

限制

0 <= 連結串列長度 <= 1000


解法

思路

  1. 建立一個假的頭結點和當前結點curr指向假頭結點
  2. 同時遍歷兩條連結串列,將較小的結點新增到當前結點的後面
  3. 有一條連結串列遍歷完後,將另一條連結串列剩餘的結點新增到curr結點後面,返回頭結點的next

程式碼

/* 合併兩個連結串列 */
public
ListNode mergeTwoLists(ListNode l1, ListNode l2) { // 安排一個頭結點 ListNode preHead = new ListNode(0); // curr表示當前結點 ListNode curr = preHead, p1 = l1, p2 = l2; while (p1 != null && p2 != null){ if(p1.val <= p2.val){ curr.next = p1; p1 = p1.next; }
else { curr.next = p2; p2 = p2.next; } curr = curr.next; } // 較長的連結串列剩餘部分得繼續跟在後面 curr.next = p1 == null ? p2 : p1; return preHead.next; }

提交結果