c -在不改变节点链接的情况下,倒转链表



我尝试了这个代码,但我得到了一个分割错误。如何修复此错误?

void rev()
{
    struct node *p,*q;
    p=start;
    q=start;
    int count=0,temp,i,j;
    while(p!=0)
    {
        p=p->next;
        count++;
    }
    for(i=0; i<(count/2); i++)
    {
        p=start;
        for(j=0; j<(count-i); j++)
            p=p->next;
        temp=q->data;
        q->data=p->data;
        p->data=temp;
        q=q->next;
    }
 }

这里pq是指针。起初,两者都指向起点。然后,通过使用两个循环,我交换了第一个和最后一个节点的值,然后交换了第二个和第二个最后一个节点的值,等等。

把你的for(i=0; i<(count/2); i++)写在纸上

当你到达链表的最后一个节点时,q和p都指向最后一个节点;

p = p -> next //is NULL so p goes NULL;

你的循环多运行了一次迭代。所以将你的内循环更新为count -i - 1

和当你指定p -> data = temp//NULL -> data = temp时,没有意义

程序崩溃并给出分段错误

您有一个差一的错误。计算列表中的count元素,然后在ifor列表的第一次迭代时,将列表中的pcount - 0链接步进。这使得它为NULL,正如您刚刚完成的确定。当你计算p->data时,你会产生未定义的行为。

从1到count / 2执行i,而不是从0count / 2 - 1

相关内容

  • 没有找到相关文章

最新更新