合并排序好的两个链表,同样需要注意一下问题:
- 代码鲁棒性(对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"); }