月满霜华 发表于 2017-9-27 10:38:23

双向循环链表

请问双向循环链表,插入一个节点怎么做呀。新手菜鸟求助

丶忘却的年少o 发表于 2017-9-27 10:52:27

假设没有头结点,但是有头指针
/* 链表结构 */
typedef struct Node
{
        char data;
        struct Node *prior;
        struct Node *next;
} node, *linklist;


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

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

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

        return head;                //返回头结点就是整个链表
}

月满霜华 发表于 2017-9-27 12:04:16

target和temp都是要插入的节点吗?

月满霜华 发表于 2017-9-27 12:32:08

丶忘却的年少o 发表于 2017-9-27 10:52
假设没有头结点,但是有头指针

这道题应该怎么理解呢大佬

月满霜华 发表于 2017-9-27 12:37:38

其实我想表达的就是:在非空双向循环链表(节点指针域分别为pre和next)中q所指的节点前插入一个q所指,链接点的过程怎么搞

丶忘却的年少o 发表于 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吧
别忘了点“最佳答案”{:10_315:}

月满霜华 发表于 2017-9-27 13:41:41

丶忘却的年少o 发表于 2017-9-27 13:37
temp是用来新生成的结点指针,看代码malloc申请的;target是定位指针,定位前一个节点,方便后一个申请的 ...

呃,那个,下一题的答案是D来着{:10_266:}

丶忘却的年少o 发表于 2017-9-27 13:43:35

月满霜华 发表于 2017-9-27 13:41
呃,那个,下一题的答案是D来着

那个判断头结点单链表L为空是D呀,我……

月满霜华 发表于 2017-9-27 13:53:33

丶忘却的年少o 发表于 2017-9-27 13:43
那个判断头结点单链表L为空是D呀,我……

呃,我以为你说的是上面那题,,尴尬

月满霜华 发表于 2017-9-27 13:54:57

丶忘却的年少o 发表于 2017-9-27 13:43
那个判断头结点单链表L为空是D呀,我……

单链表那个确实是D哈哈{:10_256:}

月满霜华 发表于 2017-9-27 13:58:09

月满霜华 发表于 2017-9-27 13:54
单链表那个确实是D哈哈

不对哎,好像B

月满霜华 发表于 2017-9-27 14:09:43

丶忘却的年少o 发表于 2017-9-27 13:43
那个判断头结点单链表L为空是D呀,我……

最后一个问题大佬:我拍的图片上那个t->next=p是什么鬼啊?

丶忘却的年少o 发表于 2017-9-27 15:52:37

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

不就是你打的前一个人,他把手给了插进来的那个人。

丶忘却的年少o 发表于 2017-9-27 15:53:19

月满霜华 发表于 2017-9-27 13:58
不对哎,好像B

果然是B,我还以为是单链表循环,尴尬

月满霜华 发表于 2017-9-27 17:05:01

丶忘却的年少o 发表于 2017-9-27 15:53
果然是B,我还以为是单链表循环,尴尬

额,之前就已近点过最佳答案了

月满霜华 发表于 2017-9-27 17:09:58

丶忘却的年少o 发表于 2017-9-27 15:52
不就是你打的前一个人,他把手给了插进来的那个人。

按你之前说的,这不是插进来的那个人把右手给了之前左面那个人吗?太不合理了{:10_277:}

丶忘却的年少o 发表于 2017-9-27 17:28:27

月满霜华 发表于 2017-9-27 17:09
按你之前说的,这不是插进来的那个人把右手给了之前左面那个人吗?太不合理了

不对,我的意思是之前前面那个人现在要把右手拉住插进来的人!不然前面那个人右手就空了

月满霜华 发表于 2017-9-27 17:53:57

t->next不是t的后指针吗,也就是插进来那个人的右手
页: [1]
查看完整版本: 双向循环链表