2つの昇順チェーンテーブルを新しい昇順チェーンテーブルに結合して返します(BAT面接問題)
5272 ワード
一、テーマ及び例
2つの昇順チェーンテーブルを新しい昇順チェーンテーブルに結合して返します.新しいチェーンテーブルは、指定された2つのチェーンテーブルのすべてのノードを接合することによって構成されます.
例:入力:1->2->4、1->3->4出力:1->1->2->3->4->4
二、解決構想1、1つの傀儡ノードを頭ノードとして定義し、もう1つをノードとし、尾挿2を使用し、チェーンテーブルl 1、l 2の中の小さい要素を循環挿入し、1つのチェーンテーブルが空であるまで循環する.最後に長いチェーンテーブルを新しいチェーンテーブルの末尾に直接リンクすればいいです.
三、コード実装
2つの昇順チェーンテーブルを新しい昇順チェーンテーブルに結合して返します.新しいチェーンテーブルは、指定された2つのチェーンテーブルのすべてのノードを接合することによって構成されます.
例:入力:1->2->4、1->3->4出力:1->1->2->3->4->4
二、解決構想1、1つの傀儡ノードを頭ノードとして定義し、もう1つをノードとし、尾挿2を使用し、チェーンテーブルl 1、l 2の中の小さい要素を循環挿入し、1つのチェーンテーブルが空であるまで循環する.最後に長いチェーンテーブルを新しいチェーンテーブルの末尾に直接リンクすればいいです.
三、コード実装
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if (l1 == null) {
// l1 , l2
return l2;
}
if (l2 == null) { //l2 , l1
return l1;
}
ListNode newHead = new ListNode(-1); // ( )
ListNode newTail = newHead; //
ListNode cur1 = l1; // l1
ListNode cur2 = l2; // l2
while (cur1 != null && cur2 != null) { //
if (cur1.val < cur2.val) {
// cur1
// , newTail null null .
newTail.next = cur1;
newTail = newTail.next;
cur1 = cur1.next;
} else {
newTail.next = cur2;
newTail = newTail.next;
cur2 = cur2.next;
}
}
// , cur1 cur2 .
//
if (cur1 == null) {
newTail.next = cur2;
} else {
newTail.next = cur1;
}
return newHead.next;
}