自己实现的链表,包括对链表的基本实现,其中有的函数实现了,没有用到,因为这个是一个简单的程序,没有实现了,其中有的问题需要注意一下:

 

#include <iostream>
using namespace std;

#define true 1
#define false 0

class List;             //注意List的前置声明,其实也可以将ListNode放到List类中去实现,但是这样的实现的灵活性不是很好
class ListNode
{
 friend class List;               //声明List为友元类
private:
 int data;
 ListNode *link;
};

class List
{
public:
 List();
 void Insert(int,int);           //链表中插入,在一个位置插入一个值
 void Remove(int);           //删除操作,删除一个位置的一个值
 bool IsEmpty();                 //判断链表是否为空
 int GetElement(int);       //取链表中一个位置的一个元素值
 int Find(int);                   //遍历链表查找元素
 void Show();          //列出链表
private:
 ListNode *head;          //指向链表表头的指针
 int size;                     //定义指针的长度
};

List::List()
{
 ListNode *first,*s;
 size = 0;
 first = new ListNode;
 head = first;
 cout<<"Input the Elements:";
 cin>>first->data;
 while((first->data) != -1 )
 {
  s = first;
  first = new ListNode;
  s->link = first;
  size++;
  cin>>first->data;
 }
 delete first;
 s->link = NULL;
}

void List::Show()
{
 cout<<"Now show the List:";
 while(head)
 {
  cout<<head->data<<" ";
  head = head->link;
 }
 cout<<endl;
}

void List::Insert(int Element,int Location)
{
 int i = 0;
 ListNode *newNode,*p,*s;
 s = head;
 while(i != Location)
 {
  s = s->link;
  i++;
 }
 p = s->link;
 newNode = new ListNode;
 newNode->data = Element;
 s->link = newNode;
 newNode->link = p;
 size =size + 1;
}

void List::Remove(int Location)
{
 int i = 0;
 ListNode *s,*p;
 s = head;
 while(i != Location)
 {
  s = s->link;
  i++;
 }
 p = s->link->link;
 delete s->link;                             //删除了一个节点,但是不能忘了,把这个节点的位置的指针删除了,对于一个小程序来说

   //没什么,但是要是对于一个大程序来说,这个是致命的地方,可能有内存泄露。
 s->link = p;
}

bool List::IsEmpty()
{
 if(size == 0)
  return true;
 else
  return false;
}

int List::GetElement(int Location)
{
 int i = 0;
 ListNode *t;
 t = head;
 while(i != Location)
 {
  t = t->link;
  i++;
 }
 return (t->data);
}

void main()                              //main函数实现的比较粗糙了,就是输入几个整形数了。没有定义很多的变量来实现输入操作
{
 int Element;
 List list;
 list.Insert(3,2);
 list.Remove(6);
 Element = list.GetElement(5);
 cout<<Element<<endl;
 list.Show();                      //将这个函数放在最后,你可能不懂,但是它必须放在最后面,如果不想,要多定义一个指针了。因            //head  是List的私有变量