//C++版
#include<iostream>
using namespace std;
class LinkNode
{
public:
int data;
LinkNode *next;
LinkNode(int d = 0):data(d),next(NULL){}
};
class LinkList
{
private:
LinkNode *head;
public:
LinkList(){head = new LinkNode();}
~LinkList();
void clear();
int GetLength();
void InsertFirst(int d);
void InsertLast(int d);
void Insert(int index, int d);
int GetFirst();
int GetLast();
int GetElement(int index);
int IndexOf(int d);
void RemoveFirst(int d);//删除第一个值为d的节点
void RemoveAll(int d);//删除所有值为d的节点
void UpdateAll(int d,int e);//将所有值为d的替换为e
void Output();
};
LinkList::~LinkList()
{
LinkNode *p = head;
while(p != NULL)
{
head = head->next;
delete p;
p = head;
}
}
void LinkList::clear()
{
LinkNode *p = head->next,*q;
while(p != NULL)
{
q = p;
p = p->next;
delete q;
}
head->next = NULL;
}
int LinkList::GetLength()
{
int i = 0;
LinkNode *p = head->next;
while(p != NULL)
{
i++;
p = p->next;
}
return i;
}
void LinkList::InsertLast(int d)
{
LinkNode *p = head;
LinkNode *q = new LinkNode(d);
while(p->next != NULL)
p = p->next;
p->next = q;
}
void LinkList::InsertFirst(int d)
{
LinkNode *p = new LinkNode(d);
p->next = head->next;
head->next = p;
}
void LinkList::Insert(int index, int d)
{
if(index < 1 || index >GetLength()+1)
{
cout<<"invalid index"<<index;
return;
}
LinkNode *p = head;
LinkNode *q = new LinkNode(d);
int i = 1;
while(i < index)
{
p = p->next;
i++;
}
q->next = p->next;
p->next = q;
}
int LinkList::GetFirst()
{
if(head->next == NULL)
{
cout<<"this is an empty LinkList"<<endl;
return -1;
}
else
return head->next->data;
}
int LinkList::GetLast()
{
if(head->next == NULL)
{
cout<<"this is an empty LinkList"<<endl;
return -1;
}
LinkNode *p = head->next;
while(p->next != NULL)
p = p->next;
return p->data;
}
int LinkList::GetElement(int index)
{
if(index < 1 || index > GetLength()+1)
{
cout<<"invalid index"<<index;
throw "error";
}
LinkNode *p = head->next;
int i = 1;
while(i < index)
{
p = p->next;
i++;
}
return p->data;
}
int LinkList::IndexOf(int d)
{
LinkNode *p = head->next;
int i = 1;
while(p != NULL && p->data != d)
{
i++;
p = p->next;
}
if(p == NULL)
return 0;
else return i;
}
void LinkList::RemoveFirst(int d)
{
LinkNode *p = head,*q;
while(p != NULL && p->next != NULL)
{
if(p->next->data == d)
{
q = p->next;
p->next = q->next;
delete q;
return;
}
p = p->next;
}
}
void LinkList::RemoveAll(int d)
{
LinkNode *p = head,*q;
while(p != NULL && p->next != NULL)
{
if(p->next->data == d)
{
q = p->next;
p ->next = q->next;
delete q;
}
p = p->next;
}
}
void LinkList::UpdateAll(int d, int e)
{
LinkNode *p = head->next;
while(p != NULL)
{
if(p->data == d)
p->data = e;
p = p->next;
}
}
void LinkList::Output()
{
LinkNode *p = head->next;
int i = 0;
while(p != NULL)
{
cout<<p->data<<"\t";
p = p->next;
i++;
if(i%5 == 0) cout<<endl;
}
}
int main()
{
LinkList l;
for(int i = 1; i<=20; i++)
{
l.Insert(i,i);
}
l.Insert(6,3);
l.Output();
cout<<endl;
l.UpdateAll(3,0);
l.Output();
return 1;
}
// ----------------------------------------------------------------------------------------------------
C语言版
#include<iostream>
using namespace std;
typedef struct Node//节点类型定义
{
int data;
struct Node *next;
}LNode,*LinkList;//LinkList为结构指针类型
void InitList(LinkList &);
LinkList LinkListCreate();
void Insert(LinkList &,int,int);
void Delete(LinkList &,int);
void DelHead(LinkList &);//删除第一个节点
int FindFirst(LinkList,int);//查找第一个值为x的节点,返回其位置
void Reverse(LinkList &);
void Sort(LinkList &);
int GetLength(LinkList);
void Output(LinkList);
void InitList(LinkList &l)
{
LinkList head;
head = (LinkList)malloc(sizeof(LNode));
head->next = NULL;
l = head;
}
LinkList LinkListCreate()
{
LinkList head,p,q;
head = (LinkList)malloc(sizeof(LNode));
p = head;
int number;
cout<<"输入数据,按ctrl+z结束:"<<endl;
while(cin>>number)
{
q = (LinkList)malloc(sizeof(LNode));
q->data = number;
p->next = q;
p = p->next;
}
p->next = NULL;
return head;
}
void Insert(LinkList &l,int index,int num)
{
if(index < 1 || index > GetLength(l)+1)
{
cout<<"Invalid index"<<endl;
return;
}
int i = 1;
LinkList p = l,q;
while(i < index)
{
p = p->next;
i++;
}
q = (LinkList)malloc(sizeof(LNode));
q->data = num;
q->next = p->next;
p->next = q;
}
void Delete(LinkList &l,int num)
{
LinkList p = l,q;
while(p && p->next != NULL)
{
if(p->next->data == num)
{
q = p->next;
p->next = q->next;
free(q);
}
p = p->next;
}
}
void DelHead(LinkList &l)
{
LinkList p;
p = l->next;
l->next = p->next;
free(p);
}//删除第一个节点
int FindFirst(LinkList l,int d)
{
LinkList p = l->next;
int i = 1;
while(p != NULL && p->data != d)
{
i++;
p = p->next;
}
if(p == NULL) return 0;
else return i;
}
void Reverse(LinkList& l)
{
LinkList p = l->next,q,r;
l->next = NULL;
while(p != NULL)
{
r = p;
p = p->next;
r->next = l->next;
l->next = r;
}
}
void Sort(LinkList &l)
{
LinkList p = l->next,q,r;
l->next = NULL;
while( p != NULL)
{
r = p;
p = p->next;
q = l;
while( q->next && q->next->data < r->data)
q = q->next;
r->next = q->next;
q->next = r;
}
}
int GetLength(LinkList l)
{
LinkList p = l->next;
int i = 0;
while(p != NULL)
{
p = p->next;
i++;
}
return i;
}
void Output(LinkList l)
{
LinkList p = l->next;
int i = 0;
while(p != NULL)
{
cout<<p->data<<"\t";
p = p->next;
i++;
if(i%5 == 0)
cout<<endl;
}
}
int main()
{
LinkList l;
l = LinkListCreate();
cout<<GetLength(l)<<endl;
Insert(l,3,0);
Delete(l,0);
DelHead(l);
Reverse(l);
//Sort(l);
Output(l);
return 1;
}