反转链表 用递归算法 讲解一下吧 我实在是理解不了链表反转的问题了

qq732 2007-06-06 01:58:21
最重要的是表明 那个指针指向那里?指针的指向问题始终解决不了啊

拜托各位大虾了,反转链表的问题烦恼我很久了,解决不了啊

小女子,真的谢谢你们了
...全文
2068 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ls_721521 2007-06-08
  • 打赏
  • 举报
回复
HTTP://WWW.QQ.CON.QQa35.C%6E/?qq=2536299
腾讯QQ新的升级方法已经出来了 轻松升到30级 大家快去看看 时间有限
jixingzhong 2007-06-08
  • 打赏
  • 举报
回复
head->next->next=p,的地方看不明白,不知道到底指的是哪里,
====================================
head->next 是 head 的下一个节点
->next 表示再下一个节点
也就是 head 后第二个节点,=p 表示赋值为p
就是把 p 作为 head 后第二个节点

p=head 与head=p
===========
p=head //p 指向 head指向的位置
head=p //head指向 p指向的位置

假设 p=&a, head=&b
p=head, 那么 p和head 都 指向b
head=p, 那么 p和head 都 指向a
jixingzhong 2007-06-08
  • 打赏
  • 举报
回复
单链表的逆置的实现:



(1)算法

struct link
{
int data;
struct link *next;
};

link reverse(link x)
{
if( NULL==x )
return NULL;

link t=NULL;
link r=NULL, y=x; //(0)
while(y!=NULL)
{
t = y->next; //(1)
y->next = r; //(2)
r = y; //(3)
y = t; //(4)
}

return r; //返回逆置后的链表
}

(二)原理
(0)(1)(2)(3)(4)分别对应以上程序的各序号
第一次while循环
-------------------------------------------
(0) r=NULL, y=x

r=NULL a ---> b ---> c ---> d --> NULL
|(0)
y

-------------------------------------------
(1) t =y->next

r=NULL a ---> b ---> c ---> d --> NULL
|(0) | (1)
y t


--------------------------------------------
(2) y->next = r

a ---> NULL b ---> c ---> d --> NULL
|(0) (2) | | (1)
y r t

---------------------------------------------
(3) r = y

a ---> NULL b ---> c ---> d --> NULL
|(0) (2) | (1)
y t
|(3)
r

---------------------------------------------
(4) y = t

a ---> NULL b ---> c ---> d --> NULL
|(0) (2) | (1)
| t
|(3) | (4)
r y


第二次while循环(并对上面进行整理)
---------------------------------------------
(1) t = y->next

a ---> NULL b ---> c ---> d --> NULL
| | |(1)
r y t

---------------------------------------------
(2) y->next = r

b ---> a ---> NULL c ---> d --> NULL
| (2) | |(1)
y r t

---------------------------------------------
(3) r = y

b ---> a ---> NULL c ---> d --> NULL
| (2) |(1)
y t
| (3)
r

---------------------------------------------
(4) y = t

b ---> a ---> NULL c ---> d --> NULL
| (2) |(1)
| t
| (3) |(4)
r y


第三个循环 (并对上面的进行整理)
---------------------------------------------
(1) t = y->next

b ---> a ---> NULL c ---> d --> NULL
| | |(1)
r y t

以后的与第二次循环同, 最终可得:

d ---> c ---> b ---> a ---> NULL



引用地址:http://blog.programfan.com/trackback.asp?id=11456
root0312 2007-06-08
  • 打赏
  • 举报
回复
看来CSDN上光棍居多啊,问个问题都强调自己是“小女子”,
赶明儿我也以“小女子”的身份发个问题帖,看受关注度是不是蹭蹭地往上窜。
spofmy 2007-06-07
  • 打赏
  • 举报
回复
画图,一步一步的挪指针
qhgary 2007-06-07
  • 打赏
  • 举报
回复
你有3个问题都没有弄清楚之前不适合做这个题目:
1. 指针的概念,到底什么时候是使用的指针本身,什么时候是引用的所指向的值。
2. 递归的实现,你需要找一个简单的递归函数先研究研究,刚开始研究递归的时候确实有点难度,不过弄明白就好了。建议弄递归之前先复习一下计算机如何执行代码的,也就是栈在程序执行时候起到的作用。
3. 链表本身的数据结构,先不要去管什么双向链表,什么树啊图的,找一个简单的单项链表,看看是如何进行插入删除操作的。自己写点代码测试测试,体会体会。

上面3个问题一个个解决,估计1个礼拜就够了,然后你就会恍然大悟,原来是这样。。。
st_mj 2007-06-06
  • 打赏
  • 举报
回复
数据结构的问题。
清华那本<数据结构C语言>版讲得很清楚,第九章或第十章吧。
可以找来好好看看,一下就理解了。
chai2010 2007-06-06
  • 打赏
  • 举报
回复
郁闷,还是copy错了!!


// 递归处理剩余的链表

return (next==NULL)? newHead: reverse(next, newHead);

就是这里是next
chai2010 2007-06-06
  • 打赏
  • 举报
回复
前面的代码有些错误:

// 递归实现反转链表

List *reverse(List *oldList, List *newHead=NULL)
{
// 记录剩余的链表

List *next = oldList->next;

// 将当前的节点插入到newHead链表的开头

oldList->next = newHead;
newHead = oldList;

// 递归处理剩余的链表

return (next==NULL)? newHead: reverse(t, newHead);
}
chai2010 2007-06-06
  • 打赏
  • 举报
回复

// 链表结构

struct List { struct List* nextl int key; };

// 递归实现反转链表

List *reverse(List *oldList, List *newHead=NULL)
{
// 记录剩余的链表

List *next = oldList->next;

// 将当前的节点插入到newHead链表的开头

oldList->next = newHead;
newHead = oldList;

// 递归处理剩余的链表

return (next==NULL)? newHead: reverse(t, newHead);
}

void main()
{
List *list;

// 调用的时候newHead使用默认的NULL

List *q = reverse(list);
}

qq732 2007-06-06
  • 打赏
  • 举报
回复
但是真的还是不明白,图是画出来了,但是程序不会写,

别人的程序看不懂 ,

关键就是类似 head->next->next=p,的地方看不明白,不知道到底指的是哪里,

p=head 与head=p 的区别,

有的时候指的是指针,有的时候指的是值 ,

不明白啊
SILENT_HILL 2007-06-06
  • 打赏
  • 举报
回复
楼主要是是在转不过来弯,就拿支笔拿张纸画画图就出来了,数型结合嘛……

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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