劍指offer 合併兩個排序的鍊錶

2021-08-21 03:17:34 字數 1064 閱讀 5599

1、題目描述

輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。

2、思路

從兩個鍊錶的頭結點開始,鍊錶1的頭結點的值小於鍊錶2的頭結點的值,因此鍊錶1的頭結點是合併後鍊錶的頭結點,我們繼續合併兩個鍊錶中剩餘的節點,在兩個鍊錶中剩下的節點依然是排序的,因此合併這兩個鍊錶的步驟和前面的步驟是一樣的,我們還是比較兩個頭結點的值,將較小的節點連線到合併後鍊錶的後面。這就是典型的遞迴過程。

注意,如果第乙個鍊錶是空鍊錶,則結果就是第二個鍊錶;如果第二個鍊錶是空鍊錶,則結果是第乙個鍊錶;如果兩個鍊錶都是空鍊錶,則合併後的結果就是空鍊錶。

3、**實現(兩種方法,遞迴實現和非遞迴實現)

class listnode }

/**遞迴實現

**/

public class solution else if(list2 == null)

listnode mergedhead = null;

if(list1.val < list2.val)else

return mergedhead;

}public static void main(string args)}

} /**

非遞迴實現 */

public class solution

if(head2 == null)

listnode node3 = null;

listnode head3 = null;

listnode node1 = head1;

listnode node2 = head2;

while(node1!=null && node2!=null)else

node1 = node1.next;

}elseelse

node2 = node2.next;}}

if(node1!=null && node2==null)

}if(node2!=null && node1==null)

}//head3 = node3;

return head3;  }

}

劍指Offer 合併兩個排序鍊錶

題目 輸入兩個遞增排序的鍊錶,合併兩個鍊錶並使新鍊錶依然是有序的 鍊錶定義如下 typedef struct listnode linklist 例子如下 首先考慮輸入特殊情況。我們假設輸入鍊錶如果不為空的話必然有序,也就是說不用判斷其有序性。當輸入鍊錶都為空指標,此時返回的鍊錶也需要為空指標。如果...

《劍指offer》 合併兩個排序鍊錶

題目描述 輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。說明 本題目包含複雜資料結構listnode,點此檢視相關資訊 struct listnode class solution else if phead2 nullptr listnode head...

劍指Offer 合併兩個排序鍊錶

問題描述 輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。思路 首先比較兩個鍊錶的頭結點,如果鍊錶1的頭結點小於鍊錶2的頭結點,鍊錶1的頭結點將是合併後鍊錶的頭結點。然後繼續合併兩個鍊錶中的剩餘結點,兩個鍊錶中剩餘的結點依然是有序的,因此合併步驟與第一步相...