合并两个有序的链表新的链表也要有序
2018-03-01 15:02
330 查看
题目:
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
解法:
两个指针指向两个链表,依次判断,谁小就接谁,谁也就获得前进(竞争前进)
代码如下:struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
if (pHead1 == NULL&&pHead2 == NULL)
return NULL;
ListNode* p1 = pHead1, *p2 = pHead2, newHead(0);
ListNode* pNew = &newHead;
while (p1&&p2)
{
if (p1->val>p2->val)//判断两个链表要接哪一个
{
pNew->next = p2;
p2 = p2->next;
}
else
{
pNew->next = p1;
p1 = p1->next;
}
pNew = pNew->next;//尾插法,最后记得NULL
pNew->next = NULL;
}
if (p1)//接上两个链表剩下部分
{
pNew->next = p1;
}
if (p2)
{
pNew->next = p2;
}
pNew = &newHead;//重新指向头节点
return pNew->next;//去掉头节点后面的就是两个链表合并的
}
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
解法:
两个指针指向两个链表,依次判断,谁小就接谁,谁也就获得前进(竞争前进)
代码如下:struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
if (pHead1 == NULL&&pHead2 == NULL)
return NULL;
ListNode* p1 = pHead1, *p2 = pHead2, newHead(0);
ListNode* pNew = &newHead;
while (p1&&p2)
{
if (p1->val>p2->val)//判断两个链表要接哪一个
{
pNew->next = p2;
p2 = p2->next;
}
else
{
pNew->next = p1;
p1 = p1->next;
}
pNew = pNew->next;//尾插法,最后记得NULL
pNew->next = NULL;
}
if (p1)//接上两个链表剩下部分
{
pNew->next = p1;
}
if (p2)
{
pNew->next = p2;
}
pNew = &newHead;//重新指向头节点
return pNew->next;//去掉头节点后面的就是两个链表合并的
}
相关文章推荐
- LeetCode基础-链表-合并两个有序链表
- 合并两个有序链表
- [LeetCode]21. 合并两个有序链表
- 合并两个有序链表
- 将两个递增的有序链表合并为一个递增的有序链表(C语言编程实现)
- 5-51 两个有序链表序列的合并 (20分)
- 线性结构1 两个有序链表序列的合并
- 【剑指offer】第二十四题(反转链表) 和 第二十五题(合并两个有序链表)
- 合并两个有序的链表
- day01之合并两个有序链表+实现1+2+3...+n要求不能使用乘除法循环条件判断等
- 剑指offer刷题之c++实现的合并两个有序的链表
- 写正确函数需要注意的地方:两个有序链表的合并
- 【题目37】合并两个有序链表
- 剑指offer系列之15:合并两个有序的链表
- 7-1 两个有序链表序列的合并
- 合并两个有序链表,合并后依然有序(C语言)
- 合并两个有序链表
- 已知两个链表head1 和head2 各自有序,请把它们合并成一个链表依然有序
- 已知两个链表head1 和head2 各自有序,请把它们合并成一个链表依然有序
- 将两个递增有序的单链表合并成一个递减有序的单链表,利用原结点空间