鱼C论坛

 找回密码
 立即注册
查看: 2903|回复: 23

[已解决]头结点问题

[复制链接]
发表于 2017-11-10 23:08:27 | 显示全部楼层 |阅读模式

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

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

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
楼主这个函数只能实现头节点数据域为空的情况,看图吧,感觉不可能不懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-11-10 23:11:31 | 显示全部楼层

回帖奖励 +1 鱼币

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

我也是一脸懵逼,快请大神
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-10 23:13:01 | 显示全部楼层
需要付费才能看?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-10 23:52:08 | 显示全部楼层
BngThea 发表于 2017-11-10 23:13
需要付费才能看?

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

使用道具 举报

 楼主| 发表于 2017-11-10 23:52:36 | 显示全部楼层
BngThea 发表于 2017-11-10 23:13
需要付费才能看?


额,那个不是给报酬的吗?第一次弄这个,不太懂,抱歉
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-10 23:54:55 | 显示全部楼层
丶忘却的年少o 发表于 2017-11-10 23:11
我也是一脸懵逼,快请大神

大神在哪?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-11 11:56:43 From FishC Mobile | 显示全部楼层
上层多了个next删掉即可
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-11 11:57:42 From FishC Mobile | 显示全部楼层
就是  temp = next = NULL;改为temp = NULL;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-11 13:33:49 From FishC Mobile | 显示全部楼层
知表不言 发表于 2017-11-11 11:55
变量名定义最好有点含义,不要全是单个的字母,还有你说的逆置是什么意思,如果是把链表头尾颠倒的话可以试 ...

就地逆置就是把单链表递增的顺序改成递减,且不另建新节点,利用原有节点
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-11 13:41:59 | 显示全部楼层
多级指针
头指针 头节点 首节点(以及增加节点Node 各指针的指向)
链条增加一环 只需要改变相邻节点指针的指向
比如Head节点->Tail节点 增加b节点  变成Head->b->Tail
再增加一个节点 就成了   Head->b->??->Tail
节点有指针域 data域
你创建HeadNode时,需要初始化数据域值 和 指针域值
h->next=NULL 是初始化NULL  h->next是一个随机值有可能会使程序出现意外的错误
理清指针指向就好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-11 14:01:03 From FishC Mobile | 显示全部楼层
知表不言 发表于 2017-11-11 11:57
就是  temp = next = NULL;改为temp = NULL;

我不是问怎么逆置,就想知道建立头节点那地方,为什么把头指针的next域置空就成功建立头节点了,建成的话头节点不就接在头指针后面吗?又说头指针后面是空的,这不是矛盾嘛
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-11 14:37:38 | 显示全部楼层
你这个程序是哪里找的呀?
我把流程过了一遍发现是有问题的呀,先不说h->next=NULL那块是如何表示头结点的,while循环里面的逆置流程也不对呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-11 15:42:39 From FishC Mobile | 显示全部楼层
Screenshot_2017-11-11-15-41-31-36.png 这个人写的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-11 16:49:06 | 显示全部楼层
看不懂~~~大婶在那里....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-13 12:34:44 From FishC Mobile | 显示全部楼层
zqianglh 发表于 2017-11-12 00:20
Node *InvertLink(Node *h)  
//创建函数
{

网上各个版本都说那个地方是建立头节点,而且把它置空这一句是整个逆置函数的核心,即把原来的头节点拆下来,再利用头插法把原链表后面的节点一个一个头节点插过来。哥们儿你应该不知道啥是单链表的逆置吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-13 12:36:54 From FishC Mobile | 显示全部楼层
算法思想:逆置链表初始为空,表中节点从原链表中依次“删除”,再逐个插入逆置链表的表头(即“头插”到逆置链表中),使它成为逆置链表的“新”的第一个结点,如此循环,直至原链表为空。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;(加上主程序的节点空间分配) 合在一起说建立一个头节点????
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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?啥叫计算机作用和人为告知。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 14:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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