合并两个排序的链表


描述

示例

思路一:迭代

设置两个指针分别指向两个链表,依次将节点摘下比较,按值从小到大链接,直到某一条链表摘空,将零一链表剩余部分依次链接到链表末尾。

代码

    /**
 * struct ListNode {
 *  int val;
 *  struct ListNode *next;
 *  ListNode(int x) : val(x), next(nullptr) {}
 * };
 */

class Solution {
public:
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param pHead1 ListNode类 
 * @param pHead2 ListNode类 
 * @return ListNode类
 */
ListNode* Merge(ListNode* pHead1, ListNode* pHead2) {
    //write code here
    if(pHead1==nullptr) return pHead2;
    if(!pHead2) return pHead1; 
    ListNode* p=pHead1;
    ListNode* q=pHead2;
    ListNode* head=nullptr;
    ListNode* next=nullptr;
    if(pHead1->val>pHead2->val)  {next=head=pHead2; q=pHead2->next;}
    else {next=head=pHead1;p=pHead1->next;}
    while(p&&q)
    {
        if(p->val>q->val) 
        {
            next->next=q;
            next=q;
            q=q->next;
            next->next=nullptr;
        }
        else {

            next->next=p;
            next=p;
            p=p->next;
            next->next=nullptr;

        }
    }
    while(p) {next->next=p;next=p;p=p->next;next->next=nullptr;}
    while(q){
        next->next=q;next=q;q=q->next;next->next=nullptr;}
    return head;
    } 
} ;

思路二:迭代

特殊情况:如果有一个链表为空,返回另一个链表 如果pHead1 节点值比小pHead2,下一个节点应该是 pHead1,应该return pHead1,在return之前,指定pHead1的下一个节点应该是pHead1.next和pHead2俩链表的合并后的头结点 如果pHead1 节点值比pHead2大,下一个节点应该是pHead2,应该return pHead2,在return之前,指定pHead2的下一个节点应该是pHead1和pHead2.next俩链表的合并后的头结点.

代码

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param pHead1 ListNode类 
     * @param pHead2 ListNode类 
     * @return ListNode类
     */
ListNode* Merge(ListNode* pHead1, ListNode* pHead2) {

   if(pHead1==nullptr||pHead2==nullptr)
    {
        return pHead1!=nullptr?pHead1:pHead2;
    }
    if(pHead1->val<pHead2->val) 
    {
        pHead1->next=Merge(pHead1->next,pHead2);
        return pHead1;
    }
    else{
        pHead2->next=Merge(pHead1,pHead2->next);
        return pHead2;
    }
}
};

声明:技术分享爱好者|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 合并两个排序的链表


Carpe Diem and Do What I Like