谁能帮我看下这个链表问题?

来源:百度知道 编辑:UC知道 时间:2024/09/20 03:04:18
head=(NODE *)malloc(sizeof(NODE));
head->code=1;
head->next=head;
for(i=n;i>1;--i)
{
p=(NODE *)malloc(sizeof(NODE));
p->code=i;p->next=head->next;head->next=p;
}
书上说这是用尾插法创建的一个结点为n的单循环链表,但是为什么我没看出来?我总感觉这个程序是错的,谁能告诉我这是不是错的?

明确说明你给的程序是错的!
不信你可以自己模拟做一次看看,指针满天飞....

你是要新建一个链表?
然后链表头为head?
p为新增节点?
然后链表尾指针指向头节点.

是这样的话,你该这么写:
NODE* lastp; //新增加一个指针用于指向最后的节点.

head=(NODE *)malloc(sizeof(NODE));
head->code=1;
head->next=head;
lastp=head;//初始时最尾的节点就是head节点
for(i=n;i>1;--i)
{
p=(NODE *)malloc(sizeof(NODE));
p->code=i;//给新增节点赋值
lastp=lastp->next;//每次执行for之后,最后一个节点就是在原基础上往后一个
lastp->next=p;//把p节点加到链表最尾
p->next=head; //指向头节点
}

;p->next=head->next;head->next=p;这两个节点不停折腾。。。你的目的说说先?
有错啊,我试着改下
head=(NODE *)malloc(sizeof(NODE));
head->code=1;
head->next=head;
prev=head;//prev是下面要创建的节点的前一个节点
for(i=n;i>1;--i)
{
p=(NODE *)malloc(sizeof(NODE));
p->code=i;
prev->next=p;//让前一个节点指向新建节点,就接起来了,注意原来prev->next==head的,现在拆开了
p->next=head;//新建节点后面指向头节点,再次成循环链表
prev=p;//让prev指向p,准备接下一个节点
}