leetcode25 k個一組反轉鍊錶

2021-10-05 10:43:30 字數 886 閱讀 1584

給你乙個鍊錶,每 k 個節點一組進行翻轉,請你返回翻轉後的鍊錶。

k 是乙個正整數,它的值小於或等於鍊錶的長度。

如果節點總數不是 k 的整數倍,那麼請將最後剩餘的節點保持原有順序。

示例:給你這個鍊錶:1->2->3->4->5

當 k = 2 時,應當返回: 2->1->4->3->5

當 k = 3 時,應當返回: 3->2->1->4->5

思路:和原地反轉鍊錶的演算法思路基本一致,每k個節點呼叫一次原地反轉的演算法。唯一的難點是銜接每段反轉好的鍊錶。如例子中的1->4,3->5。解決方法是多設定乙個指標tail記錄前乙個反轉好的鍊錶的尾部。

/**

* definition for singly-linked list.

* struct listnode

* };

*/class solution

end=end->next;

}//特殊情況,最後一段正好差乙個,迴圈會正常結束,但不需要反轉

if(end==null)

//flag表示是否是第一段,如果是的話不需要處理tail,tail的處理要從第二段反轉結束後才開始。但需要處理head。

if(flag)

else

//反轉的區間是[s,end],next指向下乙個待反轉段的開頭

next=end->next;

end->next=null;

reverse(s);

flag=true;

s=next;

end=next;

}return head;

}//反轉鍊錶

void reverse(listnode* head)

}};

LeetCode 25 k個一組翻轉鍊錶

給出乙個鍊錶,每 k 個節點一組進行翻轉,並返回翻轉後的鍊錶。k 是乙個正整數,它的值小於或等於鍊錶的長度。如果節點總數不是 k 的整數倍,那麼將最後剩餘節點保持原有順序。給定這個鍊錶 1 2 3 4 5 當 k 2 時,應當返回 2 1 4 3 5 當 k 3 時,應當返回 3 2 1 4 5 這...

LeetCode 25 K個一組翻轉鍊錶

按照每k個為一組,記錄這組內的頭和尾,第一組只需記錄翻轉後的尾即tail 接下來的每一組記錄翻轉後頭 nhead 和尾 ntail.注意更新的順序 class solution length k if length 0 return head p head listnode otail head l...

leetcode 25 k個一組翻轉鍊錶

題目描述 給出乙個鍊錶,每 k 個節點一組進行翻轉,並返回翻轉後的鍊錶。k 是乙個正整數,它的值小於或等於鍊錶的長度。如果節點總數不是 k 的整數倍,那麼將最後剩餘節點保持原有順序。示例 給定這個鍊錶 1 2 3 4 5 當 k 2 時,應當返回 2 1 4 3 5 當 k 3 時,應當返回 3 2...