題目描述
基本思路
迭代
創建一個新鏈表,只含有頭結點head,然後使用指針對兩個鏈表進行遍歷,較小的鏈表元素加入到新鏈表的末尾,當其中一個鏈表爲空時,另外一個鏈表順序加入新鏈表
public ListNode MergeTwoLists(ListNode l1, ListNode l2)
{
//創建一個新鏈表
var head = new ListNode(0);
//遍歷過程中新鏈表的最後一個節點
var currentNode = head;
while (l1 != null && l2 != null)
{
if (l1.val < l2.val)
{
//添加l1的頭元素
currentNode.next = l1;
//移除l1的頭元素
l1 = l1.next;
}
else
{
currentNode.next=l2;
l2=l2.next;
}
//更新結果鏈表的最後一個節點
currentNode = currentNode.next;
}
if (l1 == null)
{
currentNode.next = l2;
}
else
{
currentNode.next = l1;
}
return head.next;
}
遞歸
首先,當一個鏈表爲空是,返回另外一個鏈表,比較頭元素的大小,然後遞歸決定下一個添加到結果中的值
/**
* Definition for singly-linked list.
* public class ListNode {
* public int val;
* public ListNode next;
* public ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode MergeTwoLists(ListNode l1, ListNode l2) {
if (l1==null)
return l2;
if (l2==null)
return l1;
if(l1.val<l2.val)
{
//l1的後面部分l1.next,遞歸決定l1後面的元素是什麼
l1.next=MergeTwoLists(l1.next,l2);
return l1;
}
else
{
l2.next=MergeTwoLists(l1,l2.next);
return l2;
}
}
}