这是c链表的反序,一直不知道哪里错了?求教大佬们
时间: 2019-05-19来源:博客园
前景提要
这是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 1年前 显示帮助
使用"Ctrl+Enter"可进行快捷提交,评论支持部分 Markdown 语法:[link](http://example.com) _italic_ **bold** `code`。
< > 分享
分享您的问题
所有回答(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 | 园豆:584 (小虾三级) | 2019-05-19 23:16 编辑文本 预览 上传图片
Ctrl+Enter键快速提交 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 编辑文本 预览 上传图片
Ctrl+Enter键快速提交
清除回答草稿
您需要 登录 以后才能回答,未注册用户请先 注册 。

科技资讯:

科技学院:

科技百科:

科技书籍:

网站大全:

软件大全:

热门排行