社区
新手乐园
帖子详情
反转链表 用递归算法 讲解一下吧 我实在是理解不了链表反转的问题了
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
打赏
举报
回复
楼主要是是在转不过来弯,就拿支笔拿张纸画画图就出来了,数型结合嘛……
递归
反转链表
的一部分.md
递归
反转链表
的一部分.md
python算法题
链表反转
详解
实现
链表反转
有两种方式,一种是循环迭代,另外一种方式是递归。 第一种方式:循坏迭代 循坏迭代算法需要三个临时变量:pre、head、next,临界条件是链表为None或者链表就只有一个节点。 # encoding: utf-8 ...
递归入门、递归遍历、递归穷举算法
本课程带你从
递归算法
基础入手,课程是精讲大量实际项目中常用到的案例,课程深入浅出,包括递归入门,递归遍历、弟归穷举算法及各种项目,适合算法爱好者一起学习,后附每堂课项目源码,感兴趣可以观注博客,不定期更新
catwang01#Algorithm#Leetcode 92.
反转链表
II1
Leetcode 92.
反转链表
II
问题
描述算法解法1: 递归图示解法1:实现def reverseBetween(self, head: ListNode
反转链表
(不带头结点)
用迭代、递归、头插、就地逆置共 4 种方法反转不带头节点的链表,代码用 C 语言实现。
新手乐园
33,311
社区成员
41,784
社区内容
发帖
与我相关
我的任务
新手乐园
C/C++ 新手乐园
复制链接
扫一扫
分享
社区描述
C/C++ 新手乐园
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章