面试题17:合并两个排序的链表
2016-06-05 22:39
573 查看
题目:输入两个递增排序的链表,合并这两个链表使新链表仍然是递增排序的。
题目还算简单,就是要考虑的特殊情况挺多的。代码如下:
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
if(pHead1==NULL)
return pHead2;
if(pHead2==NULL)
return pHead1;
ListNode *newpre=new ListNode(0);
ListNode *current=newpre;
int val1,val2;
while(pHead1||pHead2)
{
val1=pHead1==NULL?INT_MAX:pHead1->val;
val2=pHead2==NULL?INT_MAX:pHead2->val;
if(val1<val2)
{
current->next=pHead1;
pHead1=pHead1->next;
}
else
{
current->next=pHead2;
pHead2=pHead2->next;
}
current=current->next;
}
current->next=NULL;
ListNode *newhead=newpre->next;
newpre->next=NULL;
delete newpre;
return newhead;
}
}; 看了下作者在书中写的示例代码,采用递归的方式实现,方便简洁。代码如下:
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
if(pHead1==NULL)
return pHead2;
else if(pHead2==NULL)
return pHead1;
ListNode *newhead=NULL;
if(pHead1->val<pHead2->val)
{
newhead=pHead1;
newhead->next=Merge(pHead1->next,pHead2);
}
else
{
newhead=pHead2;
newhead->next=Merge(pHead1,pHead2->next);
}
return newhead;
}
};
题目还算简单,就是要考虑的特殊情况挺多的。代码如下:
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
if(pHead1==NULL)
return pHead2;
if(pHead2==NULL)
return pHead1;
ListNode *newpre=new ListNode(0);
ListNode *current=newpre;
int val1,val2;
while(pHead1||pHead2)
{
val1=pHead1==NULL?INT_MAX:pHead1->val;
val2=pHead2==NULL?INT_MAX:pHead2->val;
if(val1<val2)
{
current->next=pHead1;
pHead1=pHead1->next;
}
else
{
current->next=pHead2;
pHead2=pHead2->next;
}
current=current->next;
}
current->next=NULL;
ListNode *newhead=newpre->next;
newpre->next=NULL;
delete newpre;
return newhead;
}
}; 看了下作者在书中写的示例代码,采用递归的方式实现,方便简洁。代码如下:
class Solution {
public:
ListNode* Merge(ListNode* pHead1, ListNode* pHead2)
{
if(pHead1==NULL)
return pHead2;
else if(pHead2==NULL)
return pHead1;
ListNode *newhead=NULL;
if(pHead1->val<pHead2->val)
{
newhead=pHead1;
newhead->next=Merge(pHead1->next,pHead2);
}
else
{
newhead=pHead2;
newhead->next=Merge(pHead1,pHead2->next);
}
return newhead;
}
};
相关文章推荐
- Hibernate常见面试知识点
- JAVA程序员必看的15本书
- 软件工程师的职业规划
- 面试小问题
- 适合程序员的画图技法
- 适合程序员的画图技法
- 鸡汤君_一个老程序员的建议66
- 面试题——找单独数字
- 面试(一)
- 剑指Offer----面试题24:二叉搜索树的后序遍历序列
- Android面试题整理
- java面试笔试题整理
- Java笔试题库之编程题库 总共30道编程题,掌握了就可以应付中级以内Java面试题
- 剑指Offer----面试题23:从上往下打印二叉树(层序遍历)
- PHP面试总结
- 机器学习面试题总结
- 剑指Offer----面试题22:栈的压入、弹出序列
- Android面试题及其答案(二)
- java的面试题:缓冲池(-128~127)
- 面试题16:反转链表