我试图解决这个反转链接列表中每个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'? –