题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
解题思路
两个表A、B之间依次比较,将较小值插入新表C。然后较大值指针不动,较小值指针后移。
比如:
A:1 3 5 7 9
B:2 4 6 8 10
A[1]<B[2],则将A[1]插入新表,B[1]指针不动,A[1]后移指向A[2];
A[2]>B[1],将B[1]插入新表,A[2]指针不动,B[1]后移指向B[2];
…
如果有一个链表较长,则将多出来的部分直接插入新表之后即可。
具体代码
- C++
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution
{
public:
ListNode *Merge(ListNode *p1, ListNode *p2){
ListNode *pHead3 = new ListNode(-1); //合成链表的头结点
ListNode *p3; //合成链表的工作指针
p3 = pHead3;
if(!p1)
return p2;
if(!p2)
return p1;
while(p1 && p2){
if(p1->val <= p2->val){
p3->next = p1;
p1 = p1->next;
}
else{
p3->next = p2;
p2 = p2->next;
}
p3 = p3->next;
}
//p1较长
if(p1)
p3->next = p1;
//p2较长
if(p2)
p3->next = p2;
return pHead3->next;
}
};
- 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 list3 = new ListNode(-1);
ListNode newlist = list3;
if(list1 == null)
return list2;
if(list2 == null)
return list1;
while(list1!=null && list2!=null){
if(list1.val > list2.val){
newlist.next = list2;
list2 = list2.next;
}
else{
newlist.next = list1;
list1 = list1.next;
}
newlist = newlist.next;
}
if(list1 != null)
newlist.next = list1;
if(list2 != null)
newlist.next = list2;
return list3.next;
}
}