鍊錶 92部分翻轉鍊錶

2021-09-25 02:52:33 字數 1050 閱讀 5331

★題目:反轉部分單向鍊錶

給定乙個單項鍊表的頭結點head,以及兩個整數from和to,

在單項鍊表上把第from個節點到第to個節點這一部分進行反轉。

例如:1->2->3->4->5->null,from=2,to=5 結果為1->4->3->2->5->null

再如:1->2->3->null,from=1,to=3 結果為3->2->1->null

要求:①時間複雜度要求為o(n),空間複雜度要求o(1)

②日過不滿足1<=from<=to<=n,則不用調整

分析:判斷滿足1≤from小於等於to≤n

找到from-1個結點fper和to+1個結點tper

翻轉fper和tper中間的部分,然後正確連線fper和tper

若fper為nullptr,說明翻轉部分包括頭結點,返回新的頭結點,否則返回舊的頭結點

1->2->3->4->5(3,4)鍊錶拆解過程為

1->2->3->5 4->5

1->2->3->5 4->3

1->2 3->5 4->3

1->2->4->3->5

void resersepart(node *&head, int from, int to)

//不滿足1≤from≤to≤n

if (from > to || from < 1 || to >len)

//fpre為空ze證明要翻轉的部分包含頭結點

cur = fpre == nullptr ? head : fpre->next;

//要翻轉部分與右邊相連

node *leftnode = tpos;

node *rightnode = cur->next;

//翻轉

while (cur->next != tpos)

cur->next = leftnode;

//翻轉部分與左部分相連

if (fpre != nullptr)

//若翻轉部分包含頭結點,從新定義頭結點

else

}

92 翻轉鍊錶

題目 思路 遍歷鍊錶,直到m位置,記錄為新的頭節點,即將開始翻轉.新增乙個pre節點,每遍歷乙個m到n之間的節點,就將它提到頭節點的前面.class solution def reversebetween self,head listnode,m int,n int listnode if not ...

鍊錶部分翻轉

題目描述 給定乙個鍊錶,翻轉該鍊錶從m到n的位置。要求直接翻轉而非申請新空間。如 給定1 2 3 4 5,m 2,n 4,返回1 4 3 2 5。假定給出的引數滿足 1 m n 鍊錶長度。時間複雜度為o n 以下為 include include typedef struct snode snode...

leetcode 92 反轉部分鍊錶

這個題是反轉一部分鍊錶。咱們希望預存乙個在left之前的節點,所以採用啞節點。之後採用鍊錶反轉的方法即可,對指標操作後即可完成。注意 l r時無需反轉,而且操作很複雜,直接返回結果即可。definition for singly linked list.struct listnode listnod...