# leetCode 21.Merge Two Sorted Lists (合并排序链表) 解题思路和方法

Merge Two Sorted Lists

Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.

/**
* Definition for singly-linked list.
* public class ListNode {
*     int val;
*     ListNode next;
*     ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
ListNode head = null;
ListNode p = null;

//从小到大的顺序合并链表
while(l1 != null && l2 != null){
if(l1.val > l2.val){
if(head == null){
head = p = l2;
}else{
p.next = l2;
p = p.next;
}
l2 = l2.next;
}else{
if(head == null){
head = p = l1;
}else{
p.next = l1;
p = p.next;
}
l1 = l1.next;
}
}
//如果链表中还有数据，继续合并，以下最多只有一个链表还有数据
while(l1 != null){
if(head == null){
head = p = l1;
}else{
p.next = l1;
p = p.next;
}
l1 = l1.next;
}
while(l2 != null){
if(head == null){
head = p = l2;
}else{
p.next = l2;
p = p.next;
}
l2 = l2.next;
}
p = null;
return head;
}
}

PS:两个代码的效果都差不多。

/**
* Definition for singly-linked list.
* public class ListNode {
*     int val;
*     ListNode next;
*     ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if(l1 == null || l2 == null)
return l1 == null ? l2:l1;
ListNode head = new ListNode(0);//定义一个头结点
ListNode p = head;
ListNode temp = null;

while(l1 != null && l2 != null){
if(l1.val > l2.val){
temp = l2;//用一个temp保存现在的l1或l2
l2 = l2.next;//l1或l2指针后移1位
}else{
temp = l1;
l1 = l1.next;
}//交换数据
p.next = temp;
p = p.next;
}//temp取不为空的一个（也可能全为空）
temp = l1 == null ?l2:l1;
p.next = temp;//将剩余的全部链接即可（上面的方法太啰嗦了）
return head.next;
}
}

• 本文已收录于以下专栏：

## 【leetcode c++】21 Merge Two Sorted Lists

Merge two sorted linked lists and return itas a new list. The new list should be made by splicing to...
• hqq39
• 2015年06月18日 13:37
• 428

## [LeetCode] 021. Merge Two Sorted Lists (Easy) (C++/Python)

[LeetCode] 021. Merge Two Sorted Lists (Easy) (C++/Python)
• hcbbt
• 2015年03月04日 20:11
• 3613

## LeetCode 21：Merge Two Sorted Lists

LeetCode 21: Merge Two Sorted Lists   Merge two sorted linked lists and return it as a new list. ...
• sunao2002002
• 2015年05月27日 23:08
• 4042

## 【leetcode】【21】Merge Two Sorted Lists

• xiaoliucool1314
• 2016年02月28日 11:23
• 235

## LeetCode 21 Merge Two Sorted Lists（合并两个已排序的链表）（Linked List）

• NoMasp
• 2015年11月10日 20:38
• 8291

## Leetcode #21 Merge Two Sorted Lists 合并有序链表 解题报告

0 题外话嗯，从这次开始我就把题目换一下，改成解题报告了，因为我小节小结总是不分，等有时间也去改下之前的解题报告咯~~我算了下自己的速度，作为一个本学期的额外爱好，到现在21天刷了100题，速度也还算...
• MebiuW
• 2016年03月23日 20:54
• 1103

## Merge Two Sorted Lists -- LeetCode

• linhuanmars
• 2014年02月22日 23:31
• 16626

## leetcode第21题——*Merge Two Sorted Lists

• buptlrw
• 2016年02月28日 10:09
• 547

## [C语言][LeetCode][21]Merge Two Sorted Lists

• Timsley
• 2016年03月04日 08:26
• 847

## 21. Merge Two Sorted Lists（python）

Merge two sorted linked lists and return it as a new list. The new list should be made by splicing t...
• qq_28119401
• 2016年09月18日 21:32
• 642

举报原因： 您举报文章：leetCode 21.Merge Two Sorted Lists (合并排序链表) 解题思路和方法 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)