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

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

题目描述

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

思路

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

代码

/*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】从尾到头打印链表

发表评论

最新留言

很好
[***.229.124.182]2023年03月11日 05时07分44秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

最新文章