乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      【LeetCode練習(xí)題】Reverse Linked List II

       雪柳花明 2016-09-28

      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.

       

      題目意思:

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

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

      1<=m<=n<=length。

       

      解題思路:

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

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

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

      首先讓pre指向第m個節(jié)點(diǎn)前面那個,cur指向第m個節(jié)點(diǎn),p1指向m的下一個節(jié)點(diǎn),因?yàn)閜1有可能是NULL,所以當(dāng)p1不是NULL的時候,p2指向p1的下一個節(jié)點(diǎn)。

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

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

       

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

       

      代碼如下:

      復(fù)制代碼
       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 };
      復(fù)制代碼

       

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多