給定乙個單向鍊錶的頭節點head,以及兩個整數from和to,在單向鍊錶上把第from個節點到第to個節點這一部分進行反轉。
例如:1-->2-->3-->4-->5-->6-->null,from=3,to=5
調整結果為:1-->2-->5-->4-->3-->6-->null
1-->2-->3-->null,from=1,to=3
調整結果為:3-->2-->1-->null
要求:1、如果鍊錶長度為n,時間複雜度要求為o(n),額外空間複雜度要求為o(1)。
2、如果不滿足1<=from<=to<=n,則不用調整。
在對部分鍊錶進行反轉時,1-->2-->3-->4-->5-->null,from=2,to=4。我們要知道from-1的節點fpre,以及to+1處的節點tpos,這樣,部分鍊錶反轉過程如下:
fpre此時指向鍊錶中的1,pre = fpre.next,將1節點的下乙個節點賦為pre,pre的下乙個節點賦為cur,那麼此時鍊錶的部分反轉就和整條鍊錶的反轉過程相同,唯一不同的是將pre = tpos。
問題解決的辦法首先是要找到from的前乙個節點和to的下乙個節點。然後對from到to處的節點進行反轉。最後還要判斷的是:如果fpre = none的話,返回新鍊錶的頭節點即可,否則返回原來的頭節點。
1view codedefreversepart(head, frm, to):
2 cur =head
3 fpre =none
4 tpos =none
5 length =0
6while
cur:
7 length += 1
8if length == frm - 1:
9 fpre =cur
10else
:11 fpre =fpre
12if length == to + 1:
13 tpos =cur
14else
:15 tpos =tpos
16 cur =cur.next
17if frm > to or frm < 1 or to >length:
18return
head
19if
fpre:
20 pre =fpre.next
21else
:22 pre =head
23 cur =pre.next
24 pre.next =tpos
25while cur !=tpos:
26 next_ =cur.next
27 cur.next =pre
28 pre =cur
29 cur =next_
30if
fpre:
31 fpre.next =pre
32return
head
33return pre
反轉部分單向鍊錶
給定乙個單向鍊錶的頭節點head,以及兩個整數from和to,在單項鍊表上把第from個節點到to個節點的這一部分進行反轉。例如 1 2 3 4 5 null from 2,to 4 調整結果為1 4 3 2 5 null 再如1 2 3 null from 1,to 3 調整結果為3 2 1 nu...
反轉部分單向鍊錶
說明 本文是左程雲老師所著的 程式設計師面試 指南 第二章中 反轉部分單向鍊錶 這一題目的c 復現。本文只包含問題描述 c 的實現以及簡單的思路,不包含解析說明,具體的問題解析請參考原書。感謝左程雲老師的支援。題目 給定乙個單向鍊錶的頭節點 head,以及兩個整數 from 和 to,在單向鍊錶上把...
005 反轉部分單向鍊錶
package com.my.util 單向鍊錶節點 public class singlenode package com.my.suanfa import com.my.util.singlenode 反轉部分單向鍊錶 時間複雜度o n 額外空間複雜度o 1 public class solut...