📅  最后修改于: 2023-12-03 14:56:19.841000             🧑  作者: Mango
本文将介绍一个用于合并两个已排序链表的 C++ 程序,这样合并后的链表顺序是相反的。
首先,我们需要明确链表的基本性质。链表的节点包含两个部分,即存储数据的值和指向下一个节点的指针。合并两个已排序的链表需要比较两个链表的节点,将值较大的节点连接到新的链表中。具体步骤如下:
因为需要将链表的顺序反转,我们可以在连接的过程中将节点插入到链表的头部。
下面是用于合并两个已排序链表的 C++ 程序的代码片段:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode* newHead = new ListNode(0);
while (l1 != NULL && l2 != NULL) {
if (l1->val > l2->val) {
ListNode* temp = l1;
l1 = l2;
l2 = temp;
}
ListNode* nextNode = l1->next;
l1->next = newHead->next;
newHead->next = l1;
l1 = nextNode;
}
if (l2 != NULL) {
l1 = l2;
}
while (l1 != NULL) {
ListNode* nextNode = l1->next;
l1->next = newHead->next;
newHead->next = l1;
l1 = nextNode;
}
return newHead->next;
}
};
该代码片段定义了一个名为 Solution
的类,其中包含了一个名为 mergeTwoLists
的方法,该方法用于合并两个已排序链表。
程序首先创建一个新的链表头部节点 newHead
,用于存储合并后的结果。然后使用循环比较两个链表的节点,并将值较大的节点连接到新的链表头部。由于需要反转链表顺序,因此每次连接完成后需要将节点插入到链表头部。最后,还需要处理剩余的节点,将其连接到新的链表末尾。