题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
解题思路
合并两个单调递增的链表,需要考虑许多情况,首先两个链表都为空,则返回空链表,否则其中一个为空,一个不为空直接就返回不为空的链表。
接着就是一般情况,新链表头先取两个链表中值小的一个,作为表头,然后该链表tail指针后移一位。(开始的tail都是等于head)。当都不为空时,则选小的结点放在新链表结尾就行。当其中只剩一个链表时,直接将其接在新的链表尾部就行,思想还是比较简单的。
题目链接.
代码块
以下是用Java实现的代码。
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode Merge(ListNode list1,ListNode list2) {
ListNode p=null;
ListNode tail1=list1;
ListNode tail2=list2;
if(tail1==null && tail2==null){
return p;
}
else if(tail1!=null && tail2==null){
return p=list1;
}
else if(tail1==null && tail2!=null){
return p=list2;
}
if(tail1.val<=tail2.val){
p=tail1;
tail1=tail1.next;
}
else{
p=tail2;
tail2=tail2.next;
}
ListNode tail3=p;
while(tail1!=null && tail2!=null){
if(tail1.val<=tail2.val){
tail3.next=tail1;
tail3=tail3.next;
tail1=tail1.next;
}
else{
tail3.next=tail2;
tail3=tail3.next;
tail2=tail2.next;
}
}
while(tail1!=null){
tail3.next=tail1;
tail3=tail3.next;
tail1=tail1.next;
}
while(tail2!=null){
tail3.next=tail2;
tail3=tail3.next;
tail2=tail2.next;
}
return p;
}
}
剑指Offer:合并排序链表
本文详细解析了如何合并两个已排序的链表,使其保持递增顺序。通过分析不同情况,如两个链表均为空、仅一个链表为空及常规情况,给出了一种简单直观的解题思路,并提供了完整的Java代码实现。
189

被折叠的 条评论
为什么被折叠?



