【題目】
給出乙個鍊錶和乙個數k,比如鍊錶1→2→3→4→5→6,k=2,則翻轉後2→1→4→3→6→5,若k=3,翻轉後3→2→1→6→5→4,若k=4,翻轉後4→3→2→1→5→6。
如果節點的數量是不k的倍數則最終留出節點應該保持原樣,每k個一反轉,不到k個不用反轉。用程式實現。
------美團校招
來自leetcode :reverse nodes in k-group
【**】
#include #include using namespace std;
struct listnode
};// head不帶頭結點
// k 旋轉個數
// 最後不滿k個不用旋轉
listnode *reversekgroup(listnode *head, int k)
//新增頭結點
listnode *dummy = new listnode(0);
dummy->next = head;
listnode *pre,*cur,*tail;
pre = dummy;
// 分組旋轉的第乙個節點即旋轉後的尾節點
tail = head;
// 當前節點
cur = head;
int count = 0;
// 統計節點個數
while(cur != null)
// 旋轉次數
int rcount = count / k;
// 分組旋轉下標
int index = 0;
// 旋轉
while(rcount)//while
pre = tail;
tail = tail->next;
rcount--;
}//while
return dummy->next;
}int main();
listnode *head = new listnode(0);
head->next = null;
listnode *node;
listnode *pre = head;
for(int i = 0;i < 5;i++)
head = reversekgroup(head->next,3);
while(head != null)
cout<
記一組面試題
我當時用的是python的內建函式,現在想想應該自己實現乙個堆排序的,這個才是最好的排序方式 堆排序裡面的儲存結構是陣列 邏輯結構是二叉樹 def heapsortmax lst,n 找出最大值登頂對頂 n len lst if n 1 return lst depth n 2 1 這個深度是0 d...
面試題 k個一組翻轉單鏈表
鍊錶中的節點每k個一組翻轉 注意點 對於上面注意點的第三條,要封裝的函式如下 注意下面的函式是左閉右開即只翻轉綠色的部分 翻轉一段鍊錶 左閉右開 翻轉從start到end之間的鍊錶 public listnode reverselist listnode start,listnode end ret...
k個一組翻轉鍊錶
題目描述 給出乙個鍊錶,每 k 個節點一組進行翻轉,並返回翻轉後的鍊錶。k 是乙個正整數,它的值小於或等於鍊錶的長度。如果節點總數不是 k 的整數倍,那麼將最後剩餘節點保持原有順序。示例 給定這個鍊錶 1 2 3 4 5當 k 2 時,應當返回 2 1 4 3 5當 k 3 時,應當返回 3 2 1...