以下是一些单链表的基本操作方法,包括单链表的创建、增加或删除元素,查找某一个元素以及反转单链表。
#include<iostream>
using namespace std;
//抽象数据类型
typedef int datatype;
typedef struct node
{
datatype data;
struct node *next;
}ListNode,*LinkList;
//单链表的创建
void Create(LinkList &head,int i)
{
datatype x;
ListNode *p,*q;
q=head=NULL;
cout<<"请输入5个数:"<<endl;
while(i--)
{
p=new ListNode;
cin>>x;
p->data=x;
p->next=NULL;
if(head==NULL)
head=p;
if(q!=NULL)
q->next=p;
q=p;
}
}
//查找链表第i个结点地址
ListNode* Locate(LinkList head,int i)
{
//参数检查
if(i<0)
return NULL;
ListNode* p;
p=head;
while(i--)
p=p->next;
return p;
}
//单链表的插入
void Insert(LinkList &head,int i,datatype x)
{
//参数检查
if(i<0)
{
cout<<"插入位置不合法!"<<endl;
return;
}
if(i>5)
{
cout<<"插入位置超过链表尾端,默认插入在表尾!"<<endl;
i=5;
}
ListNode *p,*q;
q=head;
if(i==0)
{
p=new ListNode;
p->data=x;
p->next=head;
head=p;
}
else
{
i--;
while(i--)
q=q->next;
p=new ListNode;
p->data=x;
p->next=q->next;
q->next=p;
}
}
//单链表的删除
void Delete(LinkList &head,int i)
{
//参数检查
if(i<0||i>5)
{
cout<<"删除的位置不合法!"<<endl;
return;
}
ListNode *p,*q;
p=q=head;
if(i==0)
head=q->next;
else
{
i--;
while(i--)
p=p->next;
q=p->next;
p->next=q->next;
}
delete q;
}
//单链表的反转
void Reverse(LinkList &head,int i)
{
ListNode *p,*r;
r=NULL;
while(head!=NULL)
{
p=head;
head=p->next;
p->next=r;
r=p;
}
head=p;
}
//打印单链表
void Print(LinkList &head,int i)
{
//参数检查
if(head==NULL)
{
cout<<"链表为空!"<<endl;
return;
}
ListNode *p;
p=head;
cout<<"链表中的元素为:"<<endl;
while(i--)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
//测试函数
int main()
{
LinkList head;
ListNode *n;
int i;
datatype x;
Create(head,5);
Print(head,5);
cout<<"输入要查找的结点编号:"<<endl;
cin>>i;
n=Locate(head,i-
cout<<n->data<<endl;
cout<<"输入要插入的结点编号以及对应的值:"<<endl;
cin>>i>>x;
Insert(head,i-1,x);
Print(head,6);
cout<<"输入`````
的结点编号:"<<endl;
cin>>i;
Delete(head,i-1);
Print(head,5);
cout<<"单链表反转:"<<endl;
Reverse(head,5);
Print(head,5);
return 0;
}