📌  相关文章
📜  用于合并两个已排序链表的 C++ 程序,这样合并后的链表顺序相反(1)

📅  最后修改于: 2023-12-03 14:56:19.841000             🧑  作者: Mango

合并两个已排序链表

本文将介绍一个用于合并两个已排序链表的 C++ 程序,这样合并后的链表顺序是相反的。

程序思路

首先,我们需要明确链表的基本性质。链表的节点包含两个部分,即存储数据的值和指向下一个节点的指针。合并两个已排序的链表需要比较两个链表的节点,将值较大的节点连接到新的链表中。具体步骤如下:

  1. 创建一个新的链表,用于存储合并后的结果。
  2. 循环比较两个链表的节点,将值较大的节点连接到新的链表中。
  3. 将剩余的节点连接到新的链表末尾。

因为需要将链表的顺序反转,我们可以在连接的过程中将节点插入到链表的头部。

代码实现

下面是用于合并两个已排序链表的 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,用于存储合并后的结果。然后使用循环比较两个链表的节点,并将值较大的节点连接到新的链表头部。由于需要反转链表顺序,因此每次连接完成后需要将节点插入到链表头部。最后,还需要处理剩余的节点,将其连接到新的链表末尾。