一、問題描述
給定兩個(gè)單鏈表,都是遞增有序的,將它們合并,使合并后的鏈表仍然有序。
二、解題思路
這種鏈表的問題我們最先想到是遞歸算法了,將兩個(gè)鏈表的第一個(gè)元素進(jìn)行比較 ,取較小的那個(gè)做為新鏈表的頭,剩下的分別作為兩個(gè)鏈表的頭結(jié)點(diǎn),當(dāng)其中一個(gè)鏈表全都比較完了,則直接返回另一個(gè)鏈表。
三、代碼實(shí)現(xiàn)
public class ListNode {
int value;
ListNode next;
public ListNode(int value) {
this.value = value;
}
}
/**
* 合并兩個(gè)有序單鏈表
* @param firstHead 第一個(gè)鏈表
* @param secondHead 第二個(gè)鏈表
* @return
*/
public ListNode mergeTwoListNode(ListNode firstHead, ListNode secondHead) {
// 遞歸出口
if (firstHead == null) {
return secondHead;
}
if (secondHead == null) {
return firstHead;
}
ListNode mergeNode; // 合并后的新鏈表
if (firstHead.value < secondHead.value) {
mergeNode = firstHead;
// 取下次合并的最小的節(jié)點(diǎn),遞歸
mergeNode.next = mergeTwoListNode(firstHead.next, secondHead);
} else {
mergeNode = secondHead;
mergeNode.next = mergeTwoListNode(firstHead, secondHead.next);
}
return mergeNode;
}