21xrx.com
2024-11-05 17:18:27 Tuesday
登录
文章检索 我的文章 写文章
C++完整代码:合并两个有序链表
2023-07-08 09:52:49 深夜i     --     --
C++ 完整代码 链表 合并 有序

合并两个有序链表是常见的链表问题,本文给出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* dummy = new ListNode(0);//定义一个虚拟头节点

    ListNode* cur = dummy;//定义一个当前节点

    while (l1 && l2) {

      if (l1->val <= l2->val)

        cur->next = l1;

        l1 = l1->next;

       else

        cur->next = l2;

        l2 = l2->next;

      cur = cur->next;

    }

    cur->next = l1 ? l1 : l2;//处理剩余元素

    return dummy->next;//返回新链表头结点

  }

};

4.总结

本文给出了合并两个有序链表的C++代码实现,算法思路清晰,代码简洁易懂。该问题在面试中常常出现,如果掌握了此算法,一定会有助于提高面试的成功率。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复