140 k個一組反轉單鏈表 非遞迴

2021-10-16 17:09:31 字數 1102 閱讀 9017

題目:

給定的鍊錶是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 ...