鱼C论坛

 找回密码
 立即注册
查看: 3314|回复: 17

[已解决]双向循环链表

[复制链接]
发表于 2017-9-27 10:38:23 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请问双向循环链表,插入一个节点怎么做呀。新手菜鸟求助
最佳答案
2017-9-27 13:37:16
月满霜华 发表于 2017-9-27 12:37
其实我想表达的就是:在非空双向循环链表(节点指针域分别为pre和next)中q所指的节点前插入一个q所指,链 ...

temp是用来新生成的结点指针,看代码malloc申请的;target是定位指针,定位前一个节点,方便后一个申请的结点接上去的。
链接点的过程PPT上写的是对的呀。是不是要我给你分析下每一步的意思?
其实很简单,举个例子:
一排队伍每个人左手(pre)拉前一个,右手(next)拉后一个形成圈。这个时候来个人(p)要站在你(q)前面,你怎么办?是不是你(q)左手(pre)拉着他(p),他(p)的右手(next)拉着你。
好了,这个时候p没和你本身前面的人t拉起来,那你就叫t拉他呀,叫t的过程就是你左手(pre)打一下他(t)(当然这一步要在最前面,你要让t知道有个人来了,让t的手放开你,这一步在放在最前)
然后t和p拉起来,就和你拉p一样的意思。
你直接看那个ppt的D项,一起理解这个过程你就明白了。对了,下一题答案是c吧
别忘了点“最佳答案”
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-9-27 10:52:27 | 显示全部楼层
假设没有头结点,但是有头指针
  1. /* 链表结构 */
  2. typedef struct Node
  3. {
  4.         char data;
  5.         struct Node *prior;
  6.         struct Node *next;
  7. } node, *linklist;


  8. linklist CreateList(void)        // 返回的是结构指针类型
  9. {
  10.         int i = 3;        // 申请3个结点
  11.         linklist head = NULL, target, temp;

  12.         while(i--)
  13.         {
  14.                 /* 申请一个内存空间 */
  15.                 temp = (linklist)malloc(sizeof(node));
  16.                 if ( !temp )                //判断是否申请失败
  17.                         exit(-1);

  18.                 if (head == NULL)        // 判断头指针有没有指向(链表是不是空)
  19.                         head = temp;        // 若空就头指针指向该结点
  20.                 else
  21.                 {        // 前结点后指针指向新申请结点,申请的结点前指针指向前一个结点
  22.                         target->next = temp;
  23.                         temp->prior = target;
  24.                 }
  25.                
  26.                 target = temp;                //前结点移动到申请的这个结点用于下一次添加
  27.         }
  28.         /* 最后一个结点后指针指向头结点,头结点前指针指向最后结点 */
  29.         target->next = head;
  30.         head->prior = target;

  31.         return head;                //返回头结点就是整个链表
  32. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-27 12:04:16 From FishC Mobile | 显示全部楼层
target和temp都是要插入的节点吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-27 12:32:08 From FishC Mobile | 显示全部楼层
丶忘却的年少o 发表于 2017-9-27 10:52
假设没有头结点,但是有头指针

IMG20170926114151.jpg 这道题应该怎么理解呢大佬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-27 12:37:38 From FishC Mobile | 显示全部楼层
其实我想表达的就是:在非空双向循环链表(节点指针域分别为pre和next)中q所指的节点前插入一个q所指,链接点的过程怎么搞
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-27 13:37:16 | 显示全部楼层    本楼为最佳答案   
月满霜华 发表于 2017-9-27 12:37
其实我想表达的就是:在非空双向循环链表(节点指针域分别为pre和next)中q所指的节点前插入一个q所指,链 ...

temp是用来新生成的结点指针,看代码malloc申请的;target是定位指针,定位前一个节点,方便后一个申请的结点接上去的。
链接点的过程PPT上写的是对的呀。是不是要我给你分析下每一步的意思?
其实很简单,举个例子:
一排队伍每个人左手(pre)拉前一个,右手(next)拉后一个形成圈。这个时候来个人(p)要站在你(q)前面,你怎么办?是不是你(q)左手(pre)拉着他(p),他(p)的右手(next)拉着你。
好了,这个时候p没和你本身前面的人t拉起来,那你就叫t拉他呀,叫t的过程就是你左手(pre)打一下他(t)(当然这一步要在最前面,你要让t知道有个人来了,让t的手放开你,这一步在放在最前)
然后t和p拉起来,就和你拉p一样的意思。
你直接看那个ppt的D项,一起理解这个过程你就明白了。对了,下一题答案是c吧
别忘了点“最佳答案”
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-27 13:41:41 From FishC Mobile | 显示全部楼层
丶忘却的年少o 发表于 2017-9-27 13:37
temp是用来新生成的结点指针,看代码malloc申请的;target是定位指针,定位前一个节点,方便后一个申请的 ...

呃,那个,下一题的答案是D来着
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-27 13:43:35 | 显示全部楼层
月满霜华 发表于 2017-9-27 13:41
呃,那个,下一题的答案是D来着

那个判断头结点单链表L为空是D呀,我……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-27 13:53:33 From FishC Mobile | 显示全部楼层
丶忘却的年少o 发表于 2017-9-27 13:43
那个判断头结点单链表L为空是D呀,我……

呃,我以为你说的是上面那题,,尴尬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-27 13:54:57 From FishC Mobile | 显示全部楼层
丶忘却的年少o 发表于 2017-9-27 13:43
那个判断头结点单链表L为空是D呀,我……

单链表那个确实是D哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-27 13:58:09 From FishC Mobile | 显示全部楼层
月满霜华 发表于 2017-9-27 13:54
单链表那个确实是D哈哈

不对哎,好像B
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-27 14:09:43 From FishC Mobile | 显示全部楼层
丶忘却的年少o 发表于 2017-9-27 13:43
那个判断头结点单链表L为空是D呀,我……

最后一个问题大佬:我拍的图片上那个t->next=p是什么鬼啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-27 15:52:37 | 显示全部楼层
月满霜华 发表于 2017-9-27 14:09
最后一个问题大佬:我拍的图片上那个t->next=p是什么鬼啊?

不就是你打的前一个人,他把手给了插进来的那个人。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-27 15:53:19 | 显示全部楼层

果然是B,我还以为是单链表循环,尴尬
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-27 17:05:01 | 显示全部楼层
丶忘却的年少o 发表于 2017-9-27 15:53
果然是B,我还以为是单链表循环,尴尬

额,之前就已近点过最佳答案了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-27 17:09:58 | 显示全部楼层
丶忘却的年少o 发表于 2017-9-27 15:52
不就是你打的前一个人,他把手给了插进来的那个人。

按你之前说的,这不是插进来的那个人把右手给了之前左面那个人吗?太不合理了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-9-27 17:28:27 From FishC Mobile | 显示全部楼层
月满霜华 发表于 2017-9-27 17:09
按你之前说的,这不是插进来的那个人把右手给了之前左面那个人吗?太不合理了

不对,我的意思是之前前面那个人现在要把右手拉住插进来的人!不然前面那个人右手就空了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-9-27 17:53:57 From FishC Mobile | 显示全部楼层
t->next不是t的后指针吗,也就是插进来那个人的右手
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 18:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表