剑指offer 合并链表

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

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

猜你喜欢

转载自blog.csdn.net/misayaaaaa/article/details/78593385