我試圖解決這個反轉鏈接列表中每個k塊節點的問題。我在每個外部while循環中處理2 * k個元素。可以通過在每個外部while循環中處理k個元素來完成,還是不使用hasknodes()函數?反轉鏈接列表中的每個k塊節點
樣品輸入:1-> 2-> 3-> 4-> 5和K = 3
示例輸出:3-> 2-> 1-> 4-> 5
struct node *rev(struct node *head,int k)
{
if(k == 0 || k == 1) {
return head;
}
int i;
struct node *prev,*temp,*curr,*newhead,*p,*thead;
p = head;
thead = head;
newhead = NULL;
while(p && hasknodes(p,k)) {
prev = NULL;
curr = p;
i = 0;
while(curr && i < k) {
temp = curr->next;
curr->next = prev;
prev = curr;
curr= temp;
i++;
}
if(newhead == NULL) {
newhead = prev;
}
else {
thead->next = prev;
}
p->next = curr;
head = p;
if(p) {
p = p->next;
}
}
if(newhead == NULL) {
return head;
}
return newhead;
}
//The function hasknodes(p,k) checks if there are k elements present from the current position p.
'O(2 * n)= O(n)' – amit
如果你可以撤銷最後一節的反轉,你不必知道剩餘長度。 –
沒有樣品輸出是'2-> 1-> 4-> 3-> 5'? –