【发布时间】:2015-07-09 21:44:46
【问题描述】:
我试图解决这个问题,即反转链接列表中的每 k 个节点块。我在每个外部 while 循环中处理 2*k 个元素。是否可以通过只处理每个外部 while 循环中的 k 个元素或不使用 hasknodes() 函数来完成?
样本输入: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.
【问题讨论】:
-
如果可以撤消最后一段的反转,则不必知道剩余长度。
-
样本输出不应该是
2->1->4->3->5吗? -
其他限制?你能用一个向量作为临时的吗?
-
@AlexandruBarbarosie 那错了。查看编辑。
-
@DOUGLASO.MOEN 我们不能使用向量
标签: c++ algorithm data-structures linked-list