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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

两个有序链表序列的交集_LeetCode | 21.合并两个有序链表

發布時間:2025/3/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 两个有序链表序列的交集_LeetCode | 21.合并两个有序链表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

點擊上方藍字關注我們

1、LeetCode | 2.兩數相加

2、LeetCode | 206.反轉鏈表

3、LeetCode | 1.兩數之和

4、LeetCode | 703.數據流中的第K大元素

5、LeetCode | 232.用棧實現隊列

6、LeetCode | 225.用隊列實現棧

7、LeetCode | 20.有效的括號

8、LeetCode | 141.環形鏈表

9、LeetCode | 24.兩兩交換鏈表中的節點

? ? ? ? 這次來寫一下 LeetCode 的第 21 題,合并兩個有序鏈表。

題目描述

? ? ? ? 題目直接從 LeetCode 上截圖過來,題目如下:

? ? ? ? 上面的題就是 合并兩個有序鏈表 題目的截圖,同時 LeetCode 會根據選擇的語言給出了一個類的定義或者函數的定義,然后在其中實現?合并兩個有序鏈表 的解題過程。這次我使用 C 語言來進行完成。

? ? ? ? C 語言給出的函數定義如下:

/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){}

? ? ? ??通過函數定義可以看出,mergeTwoLists 函數的參數是兩個單向鏈表,然后返回值也是一個鏈表,我們要做的就是把兩個有序的鏈表合并成一個新的有序鏈表。

問題分析

? ? ? ? 這個題目中提供的兩個鏈表本身就是有序的鏈表,只要我們把鏈表的節點逐個的遍歷并比較一遍,就可以合并為另外一個有序的列表。

? ? ? ? 我們來看一下下面的兩幅圖,當 鏈表 l1 節點上的值 和 鏈表 l2 節點上的值 進行比較時,只要 l1 節點上的值?小于等于?鏈表 l2 節點上的值,那么我們就取 鏈表 l1 節點上的值?放入 新的鏈表節點 上,并將指向 鏈表 l1 節點的指針?移動到下一個元素。反之,則將 鏈表 l2 節點上的值 放入 新的鏈表節點 上,并將指向 鏈表 l2 節點的指針 移動到下一個元素。

? ? ? ? 在兩個有序鏈表節點個數相同的時候,這樣做是沒有問題的,如果兩個有序鏈表節點個數不相同的話,那么當一個鏈表的所有節點已經遍歷完,那么就去遍歷剩下的一條鏈表即可。如下圖。

代碼實現

? ? ? ? C 語言的代碼如下:

/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2){ struct ListNode* ll1 = l1; struct ListNode* ll2 = l2; struct ListNode* ll = NULL; struct ListNode* cur = NULL; while (ll1 != NULL || ll2 != NULL) { struct ListNode* tmp = (struct ListNode*)malloc(sizeof(struct ListNode)); tmp->next = NULL; // 初始化新節點的指針 if (cur == NULL) { cur = tmp; ll = tmp; } else { // 當前節點指針的下一個節點 cur->next = tmp; cur = tmp; } // ll1為NULL后,遍歷鏈表ll2 if (ll1 == NULL) { tmp->val = ll2->val; ll2 = ll2->next; continue; } // ll2為NULL后,遍歷鏈表ll1 if (ll2 == NULL) { tmp->val = ll1->val; ll1 = ll1->next; continue; } // ll1節點的當前值小于等于ll2節點的當前值 // 則把ll1節點的當前值放入tmp節點中 if (ll1->val <= ll2->val) { tmp->val = ll1->val; ll1 = ll1->next; } else { tmp->val = ll2->val; ll2 = ll2->next; } } return ll;}

? ? ? ? 代碼中有了詳細的注釋,就不對代碼做過多的解釋了。

提交結果

? ? ? ??在寫完代碼后,點擊右下角的 “執行代碼”,然后觀察?“輸出” 和 “預期結果”?是否一致,一致的話就點擊 “提交” 按鈕。點擊 “提交” 按鈕后,系統會使用更多的測試用例來測試我們寫的函數體,如果所有的測試用例都通過了,那么就會給出 “通過” 的字樣,如果沒有通過,會給出失敗的那一組測試用例,我們可以根據給出的測試用例來繼續修改代碼。我們的代碼提交后的截圖如下:

喜歡就點在看哦~

總結

以上是生活随笔為你收集整理的两个有序链表序列的交集_LeetCode | 21.合并两个有序链表的全部內容,希望文章能夠幫你解決所遇到的問題。

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