題目:
給定的鍊錶是1->2->3->4->5
對於 k=2, 你應該返回 2→1→4→3→5
對於 k=3, 你應該返回 3→2→1→4→5
方法:
1、增加乙個新的頭節點,先計算鍊錶長度len,那麼通過len/k次反轉可以達到目的
2、在每次反轉過程中,p指標指向前乙個節點,q來儲存當前cur節點的下乙個節點
3、將cur斷鏈,拆除以後用頭插法插入p的後面
listnode *
reversekgroup
(listnode *head,
int k)
listnode *newhead = new listnode(0
);//申請新的頭結點並初始化為0
newhead->next = head;
//新的頭結點與傳入鍊錶的頭結點相連線
listnode *cur = head;
//當前結點
int len =0;
while
(cur !=
null
)//計算鍊錶的長度
cur = head;
//從頭開始記錄
listnode *p= newheade;
listnode *q=
null
;for
(int i =
0; i < len / k;
++i)
//反轉幾次
p = cur;
//標記往後走之前的cur結點
cur = cur->next;
//cur往後走
}return newhead->next;
//返回新鍊錶的頭結點
}
執行**如下
K個一組反轉鍊錶
描述 給你乙個鍊錶,每 k 個節點一組進行翻轉,請你返回翻轉後的鍊錶。k 是乙個正整數,它的值小於或等於鍊錶的長度。如果節點總數不是 k 的整數倍,那麼請將最後剩餘的節點保持原有順序。示例 給你這個鍊錶 1 2 3 4 5 當 k 2 時,應當返回 2 1 4 3 5 當 k 3 時,應當返回 3 ...
面試題 k個一組翻轉單鏈表
鍊錶中的節點每k個一組翻轉 注意點 對於上面注意點的第三條,要封裝的函式如下 注意下面的函式是左閉右開即只翻轉綠色的部分 翻轉一段鍊錶 左閉右開 翻轉從start到end之間的鍊錶 public listnode reverselist listnode start,listnode end ret...
程式設計題 每K個一組反轉鍊錶
反轉鍊錶的高階版。給出乙個鍊錶,每 k 個節點一組進行翻轉,並返回翻轉後的鍊錶。k 是乙個正整數,它的值小於或等於鍊錶的長度。如果節點總數不是 k 的整數倍,那麼將最後剩餘節點保持原有順序。public static listnode reverselist listnode head,int k ...