您的位置:首页 > Web前端

剑指offer 合并链表

2017-11-23 09:00 169 查看
合并排序好的两个链表,同样需要注意一下问题:

代码鲁棒性(对NULL等特殊输入有对应)
代码正确性(没有链表断裂的情况)
对于链表的大量指针操作,一定要将指针的命名对应其意义,尽量不出错
合并链表还可以用递归的方式进行

#include <iostream>
#include <string>
#include <vector>
#include <stack>
using namespace std;

typedef int datatype;

struct Node
{
datatype value;
Node* Next_Node;
};

//合并链表
//确定是从大到小还是从小到大?(从小打大)
Node* Reverse_List(Node* ListHead1,Node *ListHead2)
{
//特殊输入考虑
if (ListHead1 == nullptr || ListHead2 == nullptr)
{
return nullptr;
}

if (ListHead1 == nullptr && ListHead2 != nullptr)
{
return ListHead2;
}
if (ListHead1 != nullptr && ListHead2 == nullptr)
{
return ListHead1;
}

//临时结点生成
Node* List1_temp = ListHead1;
Node* List2_temp = ListHead2;
Node* List3_temp = nullptr;
Node* ListHead3 = nullptr;

if (List1_temp->value > List2_temp->value)
{
ListHead3 = List2_temp;
List2_temp = List2_temp->Next_Node;
}
else
{
ListHead3 = List1_temp;
List1_temp = List1_temp->Next_Node;
}
ListHead3->Next_Node = List3_temp;

while (List1_temp->Next_Node != nullptr && List2_temp->Next_Node != nullptr)
{
if (List1_temp->value > List2_temp->value)
{
List3_temp = List2_temp;
List2_temp = List2_temp->Next_Node;
}
else
{
List3_temp = List1_temp;
List1_temp = List1_temp->Next_Node;
}
}

return ListHead3;

}

void main()
{

system("pause");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息