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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

LeetCode 92 ——反转链表 II

發布時間:2025/3/20 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 92 ——反转链表 II 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 題目

2. 解答

我們需要先找到第 m 個結點及其上一個結點,然后將從 m 到 n 的結點進行反轉,最后依次將 m 到 n 反轉后的結點和 n 之后的結點放入原鏈表中即可。

從前往后依次遍歷 m-1 次即可找到第 m 個結點,然后我們開始將第 m 到第 n 個結點倒序放入一個新鏈表,也即每次都在新鏈表的頭結點后面進行插入,來實現這部分子鏈表的反轉。

最后,我們將這個反轉后的子鏈表放入原鏈表,再把第 n 個結點后面的鏈表也放回到原鏈表即可。

/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/ class Solution { public:ListNode* reverseBetween(ListNode* head, int m, int n) {if (head == NULL || head->next == NULL || m == n) return head;// 先找到第 m 個結點和其前一結點// 如果 m == 1,則沒有 m 的前一結點,需要特殊處理ListNode *temp = head;int num = 1;ListNode *m_last_node = NULL;while (num < m) {m_last_node = temp;temp = temp->next;num++;}ListNode *m_node = temp;// 把第 m 到 n 個結點倒序加入新鏈表中,反轉鏈表// 即每次都在頭結點之后插入結點,類似于隊列,先進的在后面ListNode *queue = new ListNode(0);ListNode *reversed_node = NULL;while (num <= n){reversed_node = temp;temp = temp->next;reversed_node->next = queue->next;queue->next = reversed_node;num++;}// 將 m 到 n 反轉后的結點放入原鏈表中if (m != 1) m_last_node->next = queue->next;else head = queue->next;// 將 n 后面的結點放入原鏈表中m_node->next = temp;return head;} };

獲取更多精彩,請關注「seniusen」!

轉載于:https://www.cnblogs.com/seniusen/p/9958597.html

總結

以上是生活随笔為你收集整理的LeetCode 92 ——反转链表 II的全部內容,希望文章能夠幫你解決所遇到的問題。

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