C语言链表倒置算法求问

Toria2015 2012-09-06 08:22:30
void Inverse(Node *&head)
{
if(!head) return;
Node *Next = head->next;
Node *Prev = NULL;
head->next = Prev;
while(Next){
Prev = head;
head = Next;
Next = Next->next;
head->next = Prev;
}
}


对指针十分不理解。本来我觉得是理解的,但是这个代码里完全没有头绪了。理不清。还请详细讲解。
...全文
108 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Toria2015 2012-09-07
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

将prev head next这三个指针指好当前的节点,然后模拟画一画就ok了。
if(!head) return;//如果空头结点直接返回
Node *Next = head->next;//next指向头结点的下一个节点
Node *Prev = NULL;//prev赋值为空
head->next = Prev;//head指向本是下一个节点,现在让他指null实际上是反向后最后一……
[/Quote]

已经明白了。是我思考方向错了。谢谢。
AndyZhang 2012-09-06
  • 打赏
  • 举报
回复
将prev head next这三个指针指好当前的节点,然后模拟画一画就ok了。
if(!head) return;//如果空头结点直接返回
Node *Next = head->next;//next指向头结点的下一个节点
Node *Prev = NULL;//prev赋值为空
head->next = Prev;//head指向本是下一个节点,现在让他指null实际上是反向后最后一个节点。
while(Next){
Prev = head;//prev指向了第一个节点
head = Next;//head到了第二个节点
Next = Next->next;//next移到了第三个节点
head->next = Prev;//head的下一个指向了前面一个,也就是现在第二个节点指向了第一个,就实现了逆序,不知道你看明白没,画画不难
SillyBenzhu 2012-09-06
  • 打赏
  • 举报
回复
对于此类混乱的赋值在纸上画一画就知道啦
Gonefar 2012-09-06
  • 打赏
  • 举报
回复
这个代码没问题吗?
Node *Next = head->next;
Node *Prev = NULL;
head->next = Prev;
经过这个之后,Next = NULL了!

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧