#include<iostream>
using namespace std;
struct Number
{
int data;
Number *next;
};
void Insert(Number *head,int num);
void Print(Number *head);
void *Change(Number *head);
void Delete(Number *head);
void Clear(Number *head);
int main()
{
Number *head;
head = new Number;//分配空间的作用
head->data = 0;//预先赋值
head->next=NULL;//使头指针的下一个指向NULL,安全吧
cout<<"input n: "<<endl;
int n;
cin>>n;
cout<<"please input number:"<<endl;
for(int i = 0;i<n;i++)
{
int x;
cin>>x;
Insert(head,x);
}
cout<<"output:"<<endl;
Print(head);
Change(head);
Print(head);
Clear(head);
Delete(head);
return 0;
}
void Insert(Number *head,int num)
{
Number *p,*q;
p=head;//插入算法从头开始找起;
while((p->next!=NULL)&&num>p->next->data)//p->next不为空才有可能进行比较大小
{
p=p->next;
}//这个循环不会一直不出来吗?不会啊,因为num会有限制的
q = new Number;//因为要插入一个新节点,所以要分配空间
q->data=num;
q->next= p->next;
p->next = q;
}
void Print(Number *head)
{
Number* p =head->next;//没有next会把head节点的数也打出来
while(p->next!=NULL)
{
cout<<p->data<<"->";
p=p->next;
}//要保证最后一个数之后不会出现->
cout<<p->data;
cout<<endl;
}
void *Change(Number *head)
{
Number *p,*q,*s;
p=head->next;
q=NULL;
head->next=NULL;//这样就把head砍下来了
while(p!=NULL)
{
s=p->next;
p->next = q;
q= p;
p=s;
}
head->next=q;//这种方法就是将head单独拿下来,然后等链表接好之后再把头接上去
return head;
}
void Delete(Number *head)
{
free(head);
}
void Clear(Number *head)
{
Number *p,*q;
p = head->next;
while(p){
q=p->next;
delete p;
p=q;
}
head ->next = NULL;
}
c++之链表的学习
最新推荐文章于 2025-04-07 09:46:14 发布