反轉鍊錶和部分反轉

2021-10-21 08:42:11 字數 2123 閱讀 1342

listnode*

reverselist

(listnode* head)

if(head-

>next==

nullptr

) listnode* p = head;

listnode* q = p-

>next;

listnode* r =

nullptr

; p-

>next =

nullptr

;while

(q)return p;

}

關鍵點:

1.雖是三個指標,但是逐個元素進行操作

2.使用p和q兩個指標配合工作,使得兩個節點間的指向反向,同時用r記錄剩下的鍊錶

3.q是操作完的最後乙個元素,因此要返回它

參考:給你單鏈表的頭指標 head 和兩個整數 left 和 right ,其中 left <= right 。請你反轉從位置 left 到位置 right 的鍊錶節點,返回 反轉後的鍊錶 。

示例 1:

輸入:head = [1,2,3,4,5], left = 2, right = 4

輸出:[1,4,3,2,5]

示例 2:

輸入:head = [5], left = 1, right = 1

輸出:[5]

鍊錶中節點數目為 n

1 <= n <= 500

-500 <= node.val <= 500

1 <= left <= right <= n

思路:利用全部反轉的邏輯,作一次封裝;

關鍵點:

1.儲存或記錄要反轉部分的前繼和後繼node;

2.判斷特殊值,如,要反轉的部分是從煉表頭開始的這種情況;

/**

* definition for singly-linked list.

* struct listnode

* listnode(int x) : val(x), next(nullptr) {}

* listnode(int x, listnode *next) : val(x), next(next) {}

* };

*/class

solution

if(left > list_length || right > list_length)

return

nullptr

;int index =1;

int length = right - left +1;

listnode *temp_tail =

nullptr

;//要反轉的長度就是鍊錶的長度,那直接全部返轉

if(length == list_length)

return

reverse

(head, length,

&temp_tail)

;//要反轉的長度就是鍊錶的長度為1,那可以不作任何操作

if(left == right)

return head;

p =nullptr

;//儲存要反轉部分的前繼

q = head;

//儲存要反轉部分的第乙個節點

while

(index < left)

//儲存要反轉部分的第乙個節點

listnode *temp_head =

reverse

(q, length,

&temp_tail)

;//要反轉的部分有可能是從鍊錶頭部開始的做個判斷即可

if(p)

else

}/*head:反轉部分的第乙個節點

length:反轉部分的長度

tail:指向要反轉部分的最後乙個結點的下乙個元素(以備後序的拼接 )

返回值:返回反轉成功後的煉表頭

*/listnode *

reverse

(listnode *head,

int length, listnode *

*tail)

}*tail = q;

return p;}}

;

鍊錶部分反轉

反轉鍊錶的一部分,從第m個到第n個節點反轉,m n都小於鍊錶長度。public void reverselist list l,int m,int n 定義乙個新的臨時頭指標 node tmp node 0 tmp.next l 移動頭指標到第 m 1 個節點 node pre tmp for in...

反轉部分單向鍊錶

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