带头结点的单链表,代码如下:
#include <iostream>
#include <cmath>
using namespace std;
struct node
{
int val;
node* next;
node(){
next=NULL;
}
};
node* head;
// 在位置i插入值节点x
void insert(int i,int x)
{
node* p = head; // 头节点对应编号为0,不存放数据
int j=0;
while(p && j<i-1){ // 找出i-1位置的节点
p = p->next;
++j;
}
if(!p || j>i-1){
cout<<"error"<<endl;
return;
}
node* q=new node();
q->val=x;
q->next=p->next;
p->next=q;
}
// 在位置i删除节点
void delet(int i)
{
node* p = head;
int j=0;
while(p->next && j<i-1){
p=p->next;
++j;
}
if(!(p->next) || j>i-1)
{
cout<<"error"<<endl;
return;
}
node* q=p->next;
p->next=q->next;
delete q;
}
void print()
{
node* p=head->next;
while(p){
cout<<p->val<<" ";
p=p->next;
}
cout<<endl;
}
// 链表反转
void reverse()
{
if(head->next==NULL)
return;
node *p1,*p2,*p3;
p1=head->next;
p2=p1->next;
while(p2){
p3=p2->next;
p2->next=p1;
p1=p2;
p2=p3;
}
head->next->next=NULL;
head->next=p1;
}
void main()
{
// 带头节点的链表
head = new node();
int n,x;
cin>>n;
for(int i=1;i<=n;i++){
cin>>x;
insert(i,x);
}
print();
reverse();
print();
}