剑指offer 合并链表

来源:互联网 发布:七天网络www7netcc查分 编辑:程序博客网 时间:2024/05/29 04:49

合并排序好的两个链表,同样需要注意一下问题:

  • 代码鲁棒性(对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");}