头结点问题
本帖最后由 月满霜华 于 2017-11-11 10:13 编辑Node *InvertLink(Node *h)//链表的逆置
{
Node *p,*q;
p=h->next;
h->next=NULL;
while(p!=NULL)
{
q=p->next;
p->next=h->next;
h->next=p;
p=q;
}
return h;
}
h->next=NULL是建立头结点吧,不理解{:10_262:} ,h是头指针?头指针的next本来是第一个结点的地址吧,为啥把他置空就建立了头结点啊。大佬请救救菜鸟吧,讲详细点,谢谢{:10_266:} 本帖最后由 丶忘却的年少o 于 2017-11-10 23:13 编辑
我也是一脸懵逼,快请大神{:10_245:} 需要付费才能看?
{:10_249:} BngThea 发表于 2017-11-10 23:13
需要付费才能看?
{:10_319:} BngThea 发表于 2017-11-10 23:13
需要付费才能看?
额,那个不是给报酬的吗?第一次弄这个,不太懂,抱歉 丶忘却的年少o 发表于 2017-11-10 23:11
我也是一脸懵逼,快请大神
大神在哪?{:10_250:} 变量名定义最好有点含义,不要全是单个的字母,还有你说的逆置是什么意思,如果是把链表头尾颠倒的话可以试试这样行不行
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;
} 上层多了个next删掉即可 就是temp = next = NULL;改为temp = NULL; 知表不言 发表于 2017-11-11 11:55
变量名定义最好有点含义,不要全是单个的字母,还有你说的逆置是什么意思,如果是把链表头尾颠倒的话可以试 ...
就地逆置就是把单链表递增的顺序改成递减,且不另建新节点,利用原有节点 多级指针
头指针 头节点 首节点(以及增加节点Node 各指针的指向)
链条增加一环 只需要改变相邻节点指针的指向
比如Head节点->Tail节点 增加b节点变成Head->b->Tail
再增加一个节点 就成了 Head->b->??->Tail
节点有指针域 data域
你创建HeadNode时,需要初始化数据域值 和 指针域值
h->next=NULL 是初始化NULLh->next是一个随机值有可能会使程序出现意外的错误
理清指针指向就好 知表不言 发表于 2017-11-11 11:57
就是temp = next = NULL;改为temp = NULL;
我不是问怎么逆置,就想知道建立头节点那地方,为什么把头指针的next域置空就成功建立头节点了,建成的话头节点不就接在头指针后面吗?又说头指针后面是空的,这不是矛盾嘛{:10_257:} 你这个程序是哪里找的呀?
我把流程过了一遍发现是有问题的呀,先不说h->next=NULL那块是如何表示头结点的,while循环里面的逆置流程也不对呀 这个人写的 {:10_257:}{:10_257:}看不懂~~~大婶在那里.... 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;
}
zqianglh 发表于 2017-11-12 00:20
Node *InvertLink(Node *h)
//创建函数
{
网上各个版本都说那个地方是建立头节点,而且把它置空这一句是整个逆置函数的核心,即把原来的头节点拆下来,再利用头插法把原链表后面的节点一个一个头节点插过来。{:10_245:}哥们儿你应该不知道啥是单链表的逆置吧 算法思想:逆置链表初始为空,表中节点从原链表中依次“删除”,再逐个插入逆置链表的表头(即“头插”到逆置链表中),使它成为逆置链表的“新”的第一个结点,如此循环,直至原链表为空。 本帖最后由 zqianglh 于 2017-11-13 23:17 编辑
head=(node*)malloc(sizeof(node));
head->next=NULL;
//这2句的意思是 1) 分配一个空间 2) 初始化head->next
//这2步的计算机作用 加上 人为主观告知 说明我在这里新建的节点是头节点
h->next=NULL;(加上主程序的节点空间分配) 合在一起说建立一个头节点???? zqianglh 发表于 2017-11-13 23:10
head=(node*)malloc(sizeof(node));
head->next=NULL;
//这2句的意思是 1) 分配一个空间 2) 初始化he ...
what?啥叫计算机作用和人为告知。。{:10_249:}
页:
[1]
2