日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode-剑指 Offer 25. 合并两个排序的链表

發布時間:2025/4/5 编程问答 10 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode-剑指 Offer 25. 合并两个排序的链表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

劍指 Offer 25. 合并兩個排序的鏈表

思路一:雙指針法

1.設置dummy為頭結點,放置于新鏈表之前,最后返回的就是dummy.next;設置cur為當前節點,從dummy開始
2.當兩個鏈表都非空時進入循環,令新鏈表的下一個節點cur.next為val更小的節點,相應的鏈表節點后移一位
3.每次循環記得cur也要后移一位
4.如果循環結束后還有鏈表非空,cur指向非空鏈表
5.返回dummy.next

/*** 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* res = new ListNode(0); //新建一個頭節點ListNode* cur = res; //定義一個當前指針while(l1!=nullptr&&l2!=nullptr){if(l1->val<=l2->val){cur->next = l1;l1 = l1->next;}else {cur->next = l2;l2 = l2->next;}cur = cur->next;}/* if(l1==nullptr){cur->next = l2;}else if(l2==nullptr){cur->next = l1;}*/cur->next = l1!=nullptr? l1:l2;return res->next;} };

思路二:遞歸法

  • 特判:如果有一個鏈表為空,返回另一個鏈表
  • 如果l1節點值比l2小,下一個節點應該是l1,應該return l1,在return之前,指定l1的下一個節點應該是l1.next和l2倆鏈表的合并后的頭結點
  • 如果l1節點值比l2大,下一個節點應該是l2,應該return l2,在return之前,指定l2的下一個節點應該是l1和l2.next倆鏈表的合并后的頭結點
  • /*** 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) {if(l1==nullptr) return l2;if(l2==nullptr) return l1;if(l1->val<=l2->val){l1->next = mergeTwoLists(l1->next, l2);return l1;}else{l2->next = mergeTwoLists(l1, l2->next);return l2;}} };

    總結

    以上是生活随笔為你收集整理的LeetCode-剑指 Offer 25. 合并两个排序的链表的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。