免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
【LeetCode練習題】Reverse Linked List II

Reverse Linked List II

Reverse a linked list from position m to n. Do it in-place and in one-pass.

For example:
Given 1->2->3->4->5->NULLm = 2 and n = 4,

return 1->4->3->2->5->NULL.

Note:
Given mn satisfy the following condition:
1 ≤ m ≤ n ≤ length of list.

 

題目意思:

翻轉給定區(qū)間[m,n]的鏈表。

第一個節(jié)點m=1。  

1<=m<=n<=length。

 

解題思路:

就我目前學習到的,有用指向指針的指針的,有插入,有逆轉的。但是所有方法的核心,都其實是一個算法,就是利用3個指針修改區(qū)間內(nèi)的節(jié)點的next值,且要保證已修改的鏈表是可以被找到的,即可以連入原鏈表中。

假設有一個鏈表有1,2,3,4,5,6,6個節(jié)點。m=2,n=5。

我們添加一個dummy節(jié)點,方便操作第一個節(jié)點。

首先讓pre指向第m個節(jié)點前面那個,cur指向第m個節(jié)點,p1指向m的下一個節(jié)點,因為p1有可能是NULL,所以當p1不是NULL的時候,p2指向p1的下一個節(jié)點。

上圖畫出了這幾個指針指向情況的開始狀態(tài)和我們希望的終止狀態(tài)。

在最終狀態(tài)下,再通過其中方框中的兩步就可以我們需要的鏈表了。

 

而cur,p1,p2三個指針在區(qū)間內(nèi)向前移動并且將p1的next指向cur的過程則包含在一個for循環(huán)內(nèi)部。如下:

 

代碼如下:

 1 class Solution { 2 public: 3     ListNode *reverseBetween(ListNode *head, int m, int n) { 4         ListNode *dummy = new ListNode(0); 5         dummy->next = head; 6  7         ListNode *pre = dummy, *cur = head; 8         for(int i = 1; i < m; i++){ 9             pre = cur;10             cur = cur->next;11         }12 13         ListNode *p1,*p2;14         if(cur)15             p1 = cur->next;16         if(p1)17             p2 = p1->next;18         for(int j = m; j < n; j++){19             p1->next = cur;20             cur = p1;21             p1 = p2;22             if(p2) p2 = p2->next;23         }24         pre->next->next = p1;25         pre->next = cur;26 27         return dummy->next;28     }29 };

 

本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
595,刪除排序鏈表中的重復元素
刪除該鏈表中重復的結點(BAT面試題)
3分鐘學個算法:鏈表反轉
算法 - 鏈表操作思想 && case
10.代碼的魯棒性(4)
鏈表算法面試問題?看我就夠了!
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服