首页 新闻 会员 周边

这是c链表的反序,一直不知道哪里错了?求教大佬们

0
[待解决问题]

st* reverse(st* head)
{
st* p1;
st* p2;
p1=NULL;
p2=head;
while(p2!=NULL)
{
p2->next=p1;
p1=p2;
p2=p2->next;
if(p2->next==NULL)
{
p2->next=p1;
p1=p2;
}
}
head=p1;
return head;
}

李嘉图啊李嘉图的主页 李嘉图啊李嘉图 | 菜鸟二级 | 园豆:202
提问于:2019-05-19 19:44

建议给代码加上高亮,支持 markdown 代码高亮语法

dudu 4年前
< >
分享
所有回答(2)
0
st* reverse(st* head) {
    st* p1;
    st* p2;
    p1=NULL;
    p2=head;
    while(p2!=NULL) {
        p2->next=p1;
        p1=p2;
        p2=p2->next;
        if(p2->next==NULL) {
            p2->next=p1;
            p1=p2;
        }
    }
    head=p1;
    return head;
}

关键点:第一次进入while循环的时候,第7行将p1(此时p1为null)赋值给p2->next,然后在第9行,p2=p2->next;岂不是将null赋值给p2,这可不是指针后移。
你这明显是没有理解链表的反序原理啊,建议先理解一下原理,画一下图,写个伪代码,然后在用c语言进行实现

寻觅beyond | 园豆:923 (小虾三级) | 2019-05-19 23:16
0

st* reverse(st* head)
{
st* p1;
st* p2;
st* p3;
p2=head;
p1=p2->next;
p2->next=NULL;
p3=NULL;(p3指针初始化)
while(p1)
{
p3=p1->next;
p1->next=p2->next;
p2->next=p1;
p1=p3;
}
return p2;
试试这个头插法

霜寒十四州 | 园豆:202 (菜鸟二级) | 2019-05-20 10:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册