剑指offer——25合并两个排序的链表
2024-09-06 06:00:41
题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
题解:
使用普通方法,或者递归,注意新的头节点即可。
//使用普通的合并方法
class Solution01 {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
if (pHead1 == nullptr || pHead2 == nullptr)return pHead1 == nullptr ? pHead2 : pHead1;
ListNode* newHead = nullptr, *p1 = nullptr, *p2 = nullptr;
newHead = new ListNode();
newHead->next = pHead1;
p1 = newHead;
p2 = pHead2;
while (p1->next != nullptr && p2 != nullptr)
{
if (p1->next->val < p2->val)
p1 = p1->next;
else
{
ListNode* temp = p1->next;
p1->next = p2;
p2 = p2->next;
p1->next->next = temp;
p1 = p1->next;
}
}
if (p1->next == nullptr && p2 != nullptr)
p1->next = p2;
return newHead->next;
}
}; //使用递归
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
if (pHead1 == nullptr || pHead2 == nullptr)return pHead1 == nullptr ? pHead2 : pHead1;
ListNode* newHead = nullptr;
if (pHead1->val < pHead2->val)
{
newHead = pHead1;
newHead->next = Merge(pHead1->next, pHead2);
}
else
{
newHead = pHead2;
newHead->next = Merge(pHead1, pHead2->next);
}
return newHead;
}
};
最新文章
- Redis初识、设计思想与一些学习资源推荐
- iOS ARC模式 内存管理
- SQL SERVER 安全性体系
- OP和DBA相关的一些有用资源
- 使用 IL 实现类型转换
- winserver2008,运行可执行文件,提示 激活上下文生成失败。 找不到从属程序集 Microsoft.VC90.DebugCRT,processorArchitecture=";x86";
- SQLSERVER2000以上 Ad Hoc Distributed Queries的启用与关闭
- JVM参数配置大全
- android monkey测试学习
- spring源码系列(一)sring源码编译 spring源码下载 spring源码阅读
- unity实现玻璃效果
- Alignment And Compiler Error C2719 字节对齐和编译错误C2719
- C#常用的单元测试框架
- 如何处理Excel空行问题
- 2009 ACM 水题
- SpringMVC知识点
- Git的简单操作
- 【c++基础】vector中按照Point类型某一个变量进行排序
- Answer the questions(回答自己的问题)
- IIS 使用多个https和通配证书解决方案