【剑指Offer】合并两个排序的链表
发布日期:2022-02-10 08:55:12 浏览次数:31 分类:技术文章

本文共 2230 字,大约阅读时间需要 7 分钟。

题目描述

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

思路

很基础的两个指针分别指向两个链表,然后比大小的过程,循环解决。代码写的很细致,主要考虑鲁棒性问题。

代码

/*struct ListNode {	int val;	struct ListNode *next;	ListNode(int x) :			val(x), next(NULL) {	}};*/class Solution {public:    ListNode* Merge(ListNode* pHead1, ListNode* pHead2)    {                ListNode* p1 = pHead1;        ListNode* p2 = pHead2;                ListNode* Head = NULL;        ListNode* pLast = NULL;                if(pHead1 == NULL && pHead2 == NULL){            return NULL;        }else if(pHead1 != NULL && pHead2 == NULL){            return pHead1;        }else if(pHead1 == NULL && pHead2 != NULL){            return pHead2;        }                        if(p1->val < p2->val){            Head = new ListNode(p1->val);            pLast = Head;            p1=p1->next;        }else if(p1->val > p2->val){            Head = new ListNode(p2->val);            pLast = Head;            p2=p2->next;        }else if(p1->val == p2->val){            Head = new ListNode(p1->val);            pLast = Head;            pLast->next = new ListNode(p2->val);            pLast=pLast->next;            p1=p1->next;            p2=p2->next;        }                while(p1 != NULL && p2!= NULL){            if(p1->val < p2->val){                pLast->next = new ListNode(p1->val);                pLast = pLast->next;                p1=p1->next;            }else if(p1->val > p2->val){                pLast->next = new ListNode(p2->val);                pLast = pLast->next;                p2=p2->next;            }else if(p1->val == p2->val){                pLast->next = new ListNode(p1->val);                pLast=pLast->next;                pLast->next = new ListNode(p2->val);                pLast=pLast->next;                p1=p1->next;                p2=p2->next;            }        }                if(p2 != NULL){            while(p2!= NULL){                pLast->next = new ListNode(p2->val);                pLast = pLast->next;                p2=p2->next;            }        }else if(p1 != NULL){            while(p1!= NULL){                pLast->next = new ListNode(p1->val);                pLast = pLast->next;                p1=p1->next;            }        }                return Head;    }};

 

转载地址:https://blog.csdn.net/hanmin822/article/details/105526748 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【剑指Offer】反转链表
下一篇:【剑指Offer】从尾到头打印链表

发表评论

最新留言

不错!
[***.144.177.141]2024年03月21日 11时15分44秒