我正在解决在给定大小的组中反转链表的问题,我使用的算法如下:
1) 反转大小为 k 的第一个子列表。在反转时,我保留了下一个节点和前一个节点的轨迹。让指向下一个节点的指针为 next,指向前一个节点的指针为 prev & 指向当前节点的指针为 ptr。
2) head = reverse(next, k)-递归调用列表的其余部分
3)返回prev,它是反向列表的新头
我的代码示例是:
struct node *reverse(struct node *start,int k)
{
struct node *prev,*ptr,*next;
prev=NULL;
ptr=start;
int count=0;
while(count<k && ptr!=NULL)
{
next=ptr->link;
ptr->link=prev;
prev=ptr;
ptr=next;
count++;
}
if(next!=NULL)//recursive call
start=reverse(next,k);
return prev;
}
但是我的输出只是反转了列表的前半部分!
例如:如果我的清单是:98 74 94 857 8 7
My output is : 94 74 98(The rest is not being displayed)
我哪里错了?..这种方法正确吗?