剑指Offer -16 - 合并两个排序的链表 - C++/Java

题目描述

输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

解题思路

两个表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;
    }
}
发布了50 篇原创文章 · 获赞 15 · 访问量 4743

猜你喜欢

转载自blog.csdn.net/qq_41133986/article/details/105031096