★題目:反轉部分單向鍊錶
給定乙個單項鍊表的頭結點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...