C++循环链表问题

来源:百度知道 编辑:UC知道 时间:2024/06/01 13:32:59
1.链表在没有头指针的情况下怎么遍历!
我总是缺最后一个。
2.建立好带有头节点的循环链表后,怎么从第2开始遍历所有节点?
我 遍历的时候倒头结点就是随即数啊,跳不过去!
#include<iostream.h>
struct Node
{
int data;
Node* next;
};
void print(Node* head)
{
Node* p;
p=head;
while(p->next!=head)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
int main()
{
Node* head,*p,*q;
int x;
int n;
cout<<"输入n:";
cin>>n;
cin>>x;
head=new Node;
head->data=x;
head->next=head;
q=head;
for(int i=1;i<n;i++)
{
cin>>x;
p=new Node;
p->data=x;
p->next=head;
q->next=p;
q=p;
}
print(head);
return 0;
}
输入n=10
1 2 3 4 5 6 7 8 9 0
输出:1 2 3 4 5 6 7 8 9
循环控制的条件怎么设置啊!高手指点下!

应该把第10行下面那个while循环改成如下:
while(1)
{
cout<<p->data<<" ";
if(p->next!=head) p=p->next;
else break;
}
这是因为:按你原来的写法,当程序刚输出倒数第一个节点时,它的"next"就变成了"head",最后一个数值当然输不出来.
其实我不是本人,是他的表哥.

你应该设置一个linklist类保存头节点和尾节点,print是linklist的私有函数,头结点指针要指向头结点,不能随便移动。这样对链表操作会容易的多。

第一个问题:p->next!=head使最后一个节点无法输出,应改为
do{。。。}
while(p->next!=head)或用for循环
第二,不大明白你的意思
第三,循环控制条件可以按节点值,等等进行控制