QQ登录

只需一步,快速开始

登录 | 立即注册 | 找回密码

主题

帖子

荣誉

VIP至尊会员

Rank: 15Rank: 15Rank: 15

积分
191
查看: 259|回复: 23

[已解决]头结点问题

[复制链接]
最佳答案
0 
累计签到:63 天
连续签到:63 天
月满霜华 发表于 2017-11-10 23:08:27 25923 | 显示全部楼层 |阅读模式

马上注册加入鱼C,享用更多服务吧^_^

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

x
本帖最后由 月满霜华 于 2017-11-11 10:13 编辑
  1. Node *InvertLink(Node *h)  //链表的逆置
  2. {
  3.         Node *p,*q;
  4.         p=h->next;
  5.         h->next=NULL;
  6.         while(p!=NULL)
  7.         {
  8.                 q=p->next;
  9.                 p->next=h->next;
  10.                 h->next=p;
  11.                 p=q;
  12.         }
  13.         return h;
  14. }
复制代码

h->next=NULL是建立头结点吧,不理解 ,h是头指针?头指针的next本来是第一个结点的地址吧,为啥把他置空就建立了头结点啊。大佬请救救菜鸟吧,讲详细点,谢谢
最佳答案
2017-11-14 18:28:35
楼主这个函数只能实现头节点数据域为空的情况,看图吧,感觉不可能不懂了
楼层
跳转到指定楼层
最佳答案
222 
累计签到:143 天
连续签到:90 天
丶忘却的年少o 发表于 2017-11-10 23:11:31 | 显示全部楼层

回帖奖励 +1

本帖最后由 丶忘却的年少o 于 2017-11-10 23:13 编辑

我也是一脸懵逼,快请大神
最佳答案
211 
累计签到:160 天
连续签到:9 天
BngThea 发表于 2017-11-10 23:13:01 | 显示全部楼层
需要付费才能看?
最佳答案
519 
累计签到:169 天
连续签到:23 天
ba21 发表于 2017-11-10 23:52:08 | 显示全部楼层
BngThea 发表于 2017-11-10 23:13
需要付费才能看?

最佳答案
0 
累计签到:63 天
连续签到:63 天
月满霜华  楼主| 发表于 2017-11-10 23:52:36 | 显示全部楼层
BngThea 发表于 2017-11-10 23:13
需要付费才能看?


额,那个不是给报酬的吗?第一次弄这个,不太懂,抱歉
最佳答案
0 
累计签到:63 天
连续签到:63 天
月满霜华  楼主| 发表于 2017-11-10 23:54:55 | 显示全部楼层
丶忘却的年少o 发表于 2017-11-10 23:11
我也是一脸懵逼,快请大神

大神在哪?
最佳答案
0 
累计签到:131 天
连续签到:32 天
知表不言 发表于 2017-11-11 11:55:05 From FishC Mobile | 显示全部楼层

回帖奖励 +1

变量名定义最好有点含义,不要全是单个的字母,还有你说的逆置是什么意思,如果是把链表头尾颠倒的话可以试试这样行不行


Node *InvertLink(Node *h)  //链表的逆置
{
        if(h->next == NULL)
        {return h;}

        Node *current,*prior,*temp;//当前处理节点 前一个节点 临时节点
        prior = h->next;
        current = prior->next;
        prior->next = NULL;
        temp = next = NULL;
        while(current->next != NULL)
        {
                temp=current->next;
                current->next=prior;
                current=temp;
        }
        current->next=prior;
        h = current;
        return h;
}
最佳答案
0 
累计签到:131 天
连续签到:32 天
知表不言 发表于 2017-11-11 11:56:43 From FishC Mobile | 显示全部楼层
上层多了个next删掉即可
最佳答案
0 
累计签到:131 天
连续签到:32 天
知表不言 发表于 2017-11-11 11:57:42 From FishC Mobile | 显示全部楼层
就是  temp = next = NULL;改为temp = NULL;
最佳答案
0 
累计签到:63 天
连续签到:63 天
月满霜华  楼主| 发表于 2017-11-11 13:33:49 From FishC Mobile | 显示全部楼层
知表不言 发表于 2017-11-11 11:55
变量名定义最好有点含义,不要全是单个的字母,还有你说的逆置是什么意思,如果是把链表头尾颠倒的话可以试 ...

就地逆置就是把单链表递增的顺序改成递减,且不另建新节点,利用原有节点
最佳答案
1 

尚未签到

zqianglh 发表于 2017-11-11 13:41:59 | 显示全部楼层
多级指针
头指针 头节点 首节点(以及增加节点Node 各指针的指向)
链条增加一环 只需要改变相邻节点指针的指向
比如Head节点->Tail节点 增加b节点  变成Head->b->Tail
再增加一个节点 就成了   Head->b->??->Tail
节点有指针域 data域
你创建HeadNode时,需要初始化数据域值 和 指针域值
h->next=NULL 是初始化NULL  h->next是一个随机值有可能会使程序出现意外的错误
理清指针指向就好
最佳答案
0 
累计签到:63 天
连续签到:63 天
月满霜华  楼主| 发表于 2017-11-11 14:01:03 From FishC Mobile | 显示全部楼层
知表不言 发表于 2017-11-11 11:57
就是  temp = next = NULL;改为temp = NULL;

我不是问怎么逆置,就想知道建立头节点那地方,为什么把头指针的next域置空就成功建立头节点了,建成的话头节点不就接在头指针后面吗?又说头指针后面是空的,这不是矛盾嘛
最佳答案
118 
累计签到:400 天
连续签到:2 天
shuofxz 发表于 2017-11-11 14:37:38 | 显示全部楼层
你这个程序是哪里找的呀?
我把流程过了一遍发现是有问题的呀,先不说h->next=NULL那块是如何表示头结点的,while循环里面的逆置流程也不对呀
最佳答案
0 
累计签到:63 天
连续签到:63 天
月满霜华  楼主| 发表于 2017-11-11 15:42:39 From FishC Mobile | 显示全部楼层
Screenshot_2017-11-11-15-41-31-36.png 这个人写的
最佳答案
6 
累计签到:21 天
连续签到:1 天
橙C 发表于 2017-11-11 16:49:06 | 显示全部楼层
看不懂~~~大婶在那里....
最佳答案
1 

尚未签到

zqianglh 发表于 2017-11-12 00:20:53 | 显示全部楼层
Node *InvertLink(Node *h)  
//创建函数
{
        Node *p,*q;
//建2个指针
        p=h->next;
//把h节点 指针域所指向的 节点 赋值给P
//这时p 和 h->next都有了 h->next所指向的那个节点的地址
        h->next=NULL;
//清空h->next(这里只有置空的作用  没有 就建立了头结点这一说法)
        while(p!=NULL)
        {
                q=p->next;
                p->next=h->next;
//此时h->next为NULL,把一个NULL赋值给p->next 此时p->next=NULL  达不到逆置的作用
//h->next=NULL 这句应该需要删除
                h->next=p;
                p=q;
        }
        return h;
}
最佳答案
0 
累计签到:63 天
连续签到:63 天
月满霜华  楼主| 发表于 2017-11-13 12:34:44 From FishC Mobile | 显示全部楼层
zqianglh 发表于 2017-11-12 00:20
Node *InvertLink(Node *h)  
//创建函数
{

网上各个版本都说那个地方是建立头节点,而且把它置空这一句是整个逆置函数的核心,即把原来的头节点拆下来,再利用头插法把原链表后面的节点一个一个头节点插过来。哥们儿你应该不知道啥是单链表的逆置吧
最佳答案
0 
累计签到:63 天
连续签到:63 天
月满霜华  楼主| 发表于 2017-11-13 12:36:54 From FishC Mobile | 显示全部楼层
算法思想:逆置链表初始为空,表中节点从原链表中依次“删除”,再逐个插入逆置链表的表头(即“头插”到逆置链表中),使它成为逆置链表的“新”的第一个结点,如此循环,直至原链表为空。
最佳答案
1 

尚未签到

zqianglh 发表于 2017-11-13 23:10:47 | 显示全部楼层
本帖最后由 zqianglh 于 2017-11-13 23:17 编辑

head=(node*)malloc(sizeof(node));
head->next=NULL;  
//这2句的意思是 1) 分配一个空间 2) 初始化head->next
//这2步的计算机作用 加上 人为主观告知 说明我在这里新建的节点是头节点
  h->next=NULL;(加上主程序的节点空间分配) 合在一起说建立一个头节点????
最佳答案
0 
累计签到:63 天
连续签到:63 天
月满霜华  楼主| 发表于 2017-11-14 00:18:14 From FishC Mobile | 显示全部楼层
zqianglh 发表于 2017-11-13 23:10
head=(node*)malloc(sizeof(node));
head->next=NULL;  
//这2句的意思是 1) 分配一个空间 2) 初始化he ...

what?啥叫计算机作用和人为告知。。

发表回复

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

本版积分规则

关闭

小甲鱼强烈推荐 上一条 /1 下一条

    移动客户端下载(未启用)
    微信公众号

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备11014136号

Copyright 2018 鱼C论坛 版权所有 All Rights Reserved.

Powered by Discuz! X3.1 Copyright
© 2001-2018 Comsenz Inc.    All Rights Reserved.

小黑屋|手机版|Archiver|鱼C工作室 ( 粤公网安备 44051102000370号 | 粤ICP备11014136号

GMT+8, 2017-11-25 19:14

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