题目:
输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然按照递增排序。如下图所示:
方法一:
分析:创建新的链表3,每次比较链表1和2上相应的值,再链表3上依次创建新的结点,并将各个结点连接起来。
源代码:
#include"List.h"
#include<iostream>
using std::cout;
using std::endl;
using namespace ListSpace5;
ListNode *MergeList(ListNode *list1, ListNode *list2)
{
if (list1 == NULL && list2 == NULL)
{
cout << "两个链表都为空" << endl;
return NULL;
}
else if (list1 == NULL && list2 != NULL)
return list2;
else if (list1 != NULL && list2 == NULL)
return list1;
else
{//两个链表都不为空
ListNode *newNode = NULL;
ListNode *newNodeHead = NULL;//记录新链表的头结点
int count = 0;
ListNode *temp = NULL;//记录上一个结点,方便连接
while (list1 != NULL && list2 != NULL)
{
if (list1->element > list2->element)
{
newNode = CreateListNode(list2->element);
ListNode *mytemp = list2;
list2 = list2->next;
delete mytemp;//删除结点,防止内存泄漏
mytemp = nullptr;
}
else
{
newNode = CreateListNode(list1->element);
ListNode *mytemp = list1;//删除结点,防止内存泄漏
list1 = list1->next;
delete mytemp;
mytemp = nullptr;
}
++count;
if (count == 1)
{
newNodeHead = newNode;
ConnectListNodes(newNode, NULL);
}
else
{
ConnectListNodes(temp, newNode);
ConnectListNodes(newNode, NULL);
}
temp = newNode;
newNode = newNode->next;
}
if (list1 == NULL)
newNode = list2;
if (list2 == NULL)
newNode = list1;
return newNodeHead;
}
}
void test11()
{
cout << "\t===========测试两个非空链表的合并===========" << endl;
ListNode *list1