[leetcode]Merge Two Sorted Lists
来源:互联网 发布:网上群发短信软件 编辑:程序博客网 时间:2024/05/29 13:11
Merge Two Sorted Lists
Total Accepted: 53948 Total Submissions: 164362My SubmissionsMerge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.
思路很简单,不要额外的内存,只是有四个指针,难免混乱。cur1,cur2,next1,next2.
初始位置如下:
第一步:如果next1 != NULL && next1->val <= cur2->val 则cur1与next1同时往后移动。直到next1->val>cur2->val
此时需要改变cur1的next指针
然后如果cur1->val >= cur2->val,让cur2与next2往后扫描,只要next2 != NULL && next2->val <= cur1->val就往后,
此时要改变cur2指向的next指针。
此时又回到了上面第一步。
代码如下:
// test21MergeTwoSortedLists.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2);
int _tmain(int argc, _TCHAR* argv[])
{
ListNode *r1;
ListNode *r2;
ListNode *r3;
ListNode *r4;
ListNode *r5;
ListNode *r6;
ListNode *r7;
ListNode *r8;
ListNode *r9;
ListNode *r10;
ListNode *r11;
ListNode *r12;
ListNode *r13;
ListNode *r14;
ListNode *r15;
r1 = new ListNode(0);
r3 = new ListNode(0);
r4 = new ListNode(0);
r5 = new ListNode(0);
r6 = new ListNode(0);
r7 = new ListNode(0);
r8 = new ListNode(0);
r9 = new ListNode(0);
r10 = new ListNode(0);
r11 = new ListNode(0);
r12 = new ListNode(0);
r13 = new ListNode(0);
r14 = new ListNode(0);
r15 = new ListNode(0);
r1->val = -9;
r1->next = r3;
r2 = new ListNode(0);
r2->val = -7;
r2->next = r4;
r3->val = -7;
r3->next = r5;
r4->val = -7;
r4->next = r6;
r5->val = -3;
r5->next = r7;
r6->val = -6;
r6->next = r8;
r8->val = -6;
r8->next = r10;
r10->val = -5;
r10->next = r12;
r12->val = -3;
r12->next = r14;
r14->val = 2;
r14->next = r15;
r15->val = 4;
r15->next = NULL;
r7->val = -3;
r7->next = r9;
r9->val = -1;
r9->next = r11;
r11->val = 2;
r11->next = r13;
r13->val = 3;
r13->next = NULL;
ListNode* res = mergeTwoLists(r1, r2);
return 0;
}
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2)
{
ListNode* cur1;
ListNode* cur2;
ListNode* temp1;
ListNode* temp2;
ListNode* next1;
ListNode* next2;
int signal = 0;
if (l1 == NULL)
return l2;
if (l2 == NULL)
return l1;
cur1 = l1;
cur2 = l2;
if (cur1->val < cur2->val)
signal = 1;
else
signal = 2;
next1 = cur1->next;
next2 = cur2->next;
while (cur1 != NULL && cur2 != NULL)
{
if (cur1->val < cur2->val)
{
while (next1 != NULL && next1->val <= cur2->val)
{
cur1 = cur1->next;
next1 = next1->next;
}
if (next1 == NULL)
{
cur1->next = cur2;
if (signal == 1)
return l1;
else
return l2;
}
temp1 = cur1->next;
cur1->next = cur2;
cur1 = temp1;
next1 = cur1->next;
}
if (cur1->val >= cur2->val)
{
while (next2 != NULL && next2->val <= cur1->val)
{
cur2 = cur2->next;
next2 = next2->next;
}
if (next2 == NULL)
{
cur2->next = cur1;
if (signal == 1)
return l1;
else
return l2;
}
temp2 = cur2->next;
cur2->next = cur1;
cur2 = temp2;
next2 = cur2->next;
}
}
}
- LeetCode: Merge Two Sorted Lists
- [Leetcode] Merge Two Sorted Lists
- Leetcode: Merge Two Sorted Lists
- [LeetCode] Merge Two Sorted Lists
- [Leetcode] Merge two sorted lists
- leetcode Merge Two Sorted Lists
- [LeetCode]Merge Two Sorted Lists
- [leetcode]Merge Two Sorted Lists
- LeetCode-Merge Two Sorted Lists
- [leetcode] Merge Two Sorted Lists
- [LeetCode] Merge Two Sorted Lists
- LeetCode - Merge Two Sorted Lists
- LeetCode:Merge Two Sorted Lists
- LeetCode | Merge Two Sorted Lists
- 【leetcode】Merge Two Sorted Lists
- Leetcode: Merge Two Sorted Lists
- 【LeetCode】Merge Two Sorted Lists
- Leetcode Merge Two Sorted Lists
- MFC 调用默认对话框类对象成员和方法
- Linux提权后获取敏感信息方法
- 第五章 Numeric Types
- strncpy|src和dest所指内存区域不可重叠(lstrcpy has an undefined behavior if src and dest buffers overlap)
- Phone开发中,在XCode下混合编译C++/Objective-C
- [leetcode]Merge Two Sorted Lists
- AJAX概述,应用场景和其优缺点
- makefile教程
- SpannableString与SpannableStringBuilder
- IPTABLES NAT
- 无线传感网:linux上 6lowpan与ieee802154(zigbee)的实现比较
- 转别人对蓝牙设计问题汇总
- 神经网络Matlab实现
- javaIO_将一个目录下的文件拷贝到另一个目录下(边读边写操作)