用c++处理单链表创建,插入,删除等

如题所述

自己写的,可以行,自己看吧
#include<iostream>
using namespace std;
typedef struct lnode
{
int data;
lnode *next;
}lnode,*linklist;
int m;
int listinsert(linklist &l,int i,int e)//在带头节点的单链表中第i个元素插入元素e
{
int j=0;
linklist p,s;
p=new lnode;
p=l;
s=new lnode;
while(p&&j<i-1)
{
p=p->next;
++j;
}
if(!p||j>i-1){return 0;}
s->data=e;
s->next=p->next;
p->next=s;
return 1;
}
int listdelete(linklist &l,int i)//在带头节点的单链表中删除第i个元素e,并返回其值
{
int j=0;
linklist p;
p=new lnode;
p=l;
while(p->next&&j<i-1)
{
p=p->next;
++j;
}
if(!(p->next)||j>i-1){return 0;}
linklist q;
q=new lnode;
q=p->next;
p->next=q->next;
m=q->data;
free(q);
return 1;
}
void createlist_wei(linklist &l,int n)//尾插法
{
l=new lnode;
l->next=NULL;
linklist p,s;
p=new lnode;
p=l;
cout<<"请输入单链表:"<<endl;
for(int i=n;i>0;--i)
{
s=new lnode;
cin>>s->data;
p->next=s;
s->next=NULL;
p=s;
}
}
void createlist_tou(linklist &l,int n)//头插法
{
l=new lnode;
l->next=NULL;
linklist p;
cout<<"请输入单链表:"<<endl;
for(int i=n;i>0;i--)
{
p=new lnode;
cin>>p->data;
p->next=l->next;
l->next=p;
}
}
void display(linklist &l)
{
linklist p;
p=l->next;
cout<<"链表为:";
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
void main()
{
int a,i,e;
cout<<"请输入链表长度:";
cin>>a;
linklist l;
createlist_wei(l,a);
//createlist_tou(l,a);
display(l);
cout<<"输入插入位置:";
cin>>i;
cout<<"输入插入数据:";
cin>>e;
cout<<"在链表第"<<i<<"个位置前插入元素"<<e;
listinsert(l,i,e);cout<<endl;
display(l);
cout<<"输入要删除的位置:";
cin>>i;
cout<<"删除链表第"<<i<<"个位置元素"<<m<<endl;
listdelete(l,i);
display(l);
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-04-14
看的懂吧
template<class T>
struct Node//链表节点数据类型结构
{
T data;
Node *next;
};

template<class T>
class LinkList//链表模板类定义
{
Node<T> *head;
public:
LinkList();
LinkList(T a[],int n);
~LinkList();//有析构函数
int ListLength();
T Get(int pos);
int Locate(T item);
void PrintLinkList();
void Insert(int i,T item);
T Delete(int i);
void Invert();//逆置单链表

};

template<class T>
LinkList<T>::LinkList()
{
head=new Node<T>;
head->next=NULL;
}

template<class T>
LinkList<T>::LinkList(T a[],int n)
{
head=new Node<T>;
Node<T> *r=head;
for (int i=0;i<n;i++)
{
Node<T> *s=new Node<T>;
s->data=a[i];
r->next=s;
r=s;
}
r->next=NULL;
}

template<class T>
int LinkList<T>::ListLength()
{
int num=0;
Node<T> *p=head->next;
while (p)
{
p=p.next;
num++;
}
return num;
}

template<class T>
T LinkList<T>::Get(int pos)
{
Node<T> *p=head->next;
int j=1;
while (p&&j<pos)
{
p=p->next;
j++;
}
if (!p)
{
cerr<<"查找位置非法";
exit(1);
}
else
return p->data;
}

template<class T>
int LinkList<T>::Locate(T item)
{
Node<T> *p=head->next;
int j=1;
while (p&&p->data!=item)
{
p=p->next;
j++;
}
if (p)
{
return j;
}
else
return 0;
}

template<class T>
void LinkList<T>::PrintLinkList()
{
Node<T> *p=head->next;
while (p)
{
cout<<p->data<<endl;
p=p->next;
}
}

template<class T>
void LinkList<T>::Insert(int i,T item)
{
Node<T> *p=head;
int j=0;
while (p&&j<i-1)
{
p=p->nextp;
j++;
}
if(!p)
{
cerr<<"插入位置非法";
exit(1);
}
else
{
Node<T> *s=new Node<T>;
s.data=item;
s.next=p->next;
p->next=s;
}
}

template<class T>
T LinkList<T>::Delete(int i)
{
Node<T> *p=head;
int j=0;
while (p&&j<i-1)
{
p=p->next;
j++;
}
if (!p||!p->next)
{
cerr<<"删除位置非法";
exit(1);
}
else
{
Node<T> *q=p->next;
T x=q->data;
p->next=q->next;
delete q;
return x;
}
}

template<class T>
LinkList<T>::~LinkList()
{
Node<T> *p=head;
while (p)
{
Node<T> *q=p;
p=p->next;
delete q;
}
head=NULL;
}

template<class T>
void LinkList<T>::Invert()
{
Node<T> *P=head->next;
head->next=NULL;//将逆置后的单链表初始化为空表
while(p!=NULL)
{
Node<T> *q=p;
p=p->next;
q->next=head->next;
head->next=q;//将节点插入到逆置后单链表的表头
}
}
第2个回答  2010-04-14
原理与C相同,代码也可以原封不动的使用
相似回答