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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 中等难度 92. 反转链表 II解题思路

發(fā)布時(shí)間:2025/5/22 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 中等难度 92. 反转链表 II解题思路 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

92. 反轉(zhuǎn)鏈表 II

題目:中等難度

反轉(zhuǎn)從位置 m 到 n 的鏈表。請使用一趟掃描完成反轉(zhuǎn)。

說明:
1 ≤ m ≤ n ≤ 鏈表長度。

示例:

輸入: 1->2->3->4->5->NULL, m = 2, n = 4
輸出: 1->4->3->2->5->NULL

解題思路:
1.基礎(chǔ)首先是普通鏈表反轉(zhuǎn),也就是需要一個(gè)新鏈表頭指針new_head指向新鏈表的頭部,然后從舊鏈表里找到需要反轉(zhuǎn)的節(jié)點(diǎn)利用頭插法插入到新鏈表里。
2.著重點(diǎn)是找到需要反轉(zhuǎn)的節(jié)點(diǎn)------按位查找。
3.需要標(biāo)記舊鏈表里的四個(gè)特殊節(jié)點(diǎn),反轉(zhuǎn)完畢后連接成目標(biāo)鏈表。如下圖

4.把反轉(zhuǎn)后3里找到的四個(gè)節(jié)點(diǎn)重新鏈接即可。

總結(jié):主體框架是按位查找+鏈表反轉(zhuǎn)+重要位置節(jié)點(diǎn)的標(biāo)記

需要注意的幾個(gè)點(diǎn):

1.以上四個(gè)指針的初始賦值問題,第一個(gè)指針不能直接賦值head。因?yàn)槿绻鹠等于1時(shí),這個(gè)指針的值應(yīng)為Null。重點(diǎn)需要注意第一個(gè)指針是NULL的情況。
2.反轉(zhuǎn)時(shí)創(chuàng)建了新的鏈表,利用頭插法把舊鏈表的頭結(jié)點(diǎn)插到新鏈表時(shí),要提前用一個(gè)next指針標(biāo)記舊鏈表的下一個(gè)節(jié)點(diǎn),不然舊鏈表的頭結(jié)點(diǎn)斷開后就找不到新節(jié)點(diǎ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) {ListNode* pre_head=NULL; //反轉(zhuǎn)部分的前一個(gè)節(jié)點(diǎn)——有可能為空(即m為1的情況)ListNode* new_head=NULL; //反轉(zhuǎn)后的鏈頭ListNode* list_tail=NULL; //反轉(zhuǎn)后的鏈尾ListNode* result=head; //返回值ListNode* next; //反轉(zhuǎn)時(shí)用來標(biāo)記原鏈表的指針int len=n-m+1; // 反轉(zhuǎn)的節(jié)點(diǎn)的數(shù)量// 尋找需要反轉(zhuǎn)的第一個(gè)節(jié)點(diǎn)while(head&&--m) { pre_head=head; //1.指針跟隨head=head->next; //2.指針下移}list_tail=head; //反轉(zhuǎn)部分之前的鏈頭就是反轉(zhuǎn)之后的鏈尾//實(shí)現(xiàn)反轉(zhuǎn)部分 while(head&&(len--)) { next=head->next; //先標(biāo)記原鏈表的下一個(gè)節(jié)點(diǎn)head->next=new_head; //把原鏈表的第一個(gè)節(jié)點(diǎn)插入到新鏈表的頭new_head=head; //更新新鏈表的頭結(jié)點(diǎn)指針head=next; //更新舊鏈表的頭結(jié)點(diǎn)指針}list_tail->next=head;//判斷健壯性 --注意pre_head為null的情況if(pre_head) {pre_head->next=new_head;}else{result=new_head;}return result;} };

總結(jié)

以上是生活随笔為你收集整理的LeetCode 中等难度 92. 反转链表 II解题思路的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。