#include<iostream>
struct ListNode
{
int value;
ListNode *next;
ListNode(int value, ListNode* node) : value(value), next(node)
{
}
};
ListNode * mearge(ListNode *head1, ListNode *head2)
{
//合并后的新的有序的链表都往这个假的头上面插
ListNode *tempHead = new ListNode(-1, nullptr);
ListNode *willBeInseart = tempHead;//新元素要插在哪个节点的后面,willBeInseart始终是新链表构造过程中的最后一个节点
while (head1 != NULL && head2 != NULL)
{
if (head1->value > head2->value)
{
willBeInseart->next = head2;
head2 = head2->next;
}
else
{
willBeInseart->next = head1;
head1 = head1->next;
}
willBeInseart = willBeInseart->next;
}
if (head1 != NULL)
{
willBeInseart->next = head1;
}
if(head2 != NULL)
{
willBeInseart->next = head2;
}
return tempHead->next;
}
void traverseList(ListNode *head)
{
while (head != NULL)
{
std::cout << head->value << " ";
head = head->next;
}
std::cout << std::endl;
}
int main()
{
ListNode * node1 = new ListNode(1, nullptr);
ListNode * node2 = new ListNode(2, nullptr);
ListNode * node3 = new ListNode(3, nullptr);
ListNode * node4 = new ListNode(4, nullptr);
ListNode * node5 = new ListNode(5, nullptr);
ListNode * node6 = new ListNode(6, nullptr);
ListNode * node7 = new ListNode(7, nullptr);
node1->next = node2;
node2->next = node3;
node3->next = node4;
node4->next = node5;
node5->next = node6;
node6->next = node7;
ListNode * node8 = new ListNode(8, nullptr);
ListNode * node9 = new ListNode(9, nullptr);
ListNode * node10 = new ListNode(10, nullptr);
ListNode * node11 = new ListNode(11, nullptr);
ListNode *head1 = node1;
ListNode *head2 = node8;
ListNode * newListHead = mearge(head1, head2);
traverseList(newListHead);
}
合并两个有序链表
于 2022-03-12 00:31:41 首次发布