题目描述
基本思路
迭代
创建一个新链表,只含有头结点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;
}
}
}