反轉部分單向鍊錶

2022-09-03 03:06:10 字數 1602 閱讀 2803

給定乙個單向鍊錶的頭節點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的話,返回新鍊錶的頭節點即可,否則返回原來的頭節點。

1

defreversepart(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

view code

反轉部分單向鍊錶

給定乙個單向鍊錶的頭節點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...