我自己嘗試寫的,我用了兩個類,其中一個是節點的類,另一個鏈表的類。
具體代碼如下:
LinkNode.h 節點類
#ifndef _LINKNODE_H_
#define _LINKNODE_H_
#include <stdio.h>
class LinkNode
{
public:
LinkNode():data_(0),next_(NULL) {}
LinkNode(int data):data_(data),next_(NULL) {}
LinkNode(int data, LinkNode *p):data_(data),next_(p) {}
~LinkNode() {}
int data_;
LinkNode *next_;
};
#endif
LinkList.h 鏈表的類
#ifndef _LINKLIST_H_
#define _LINKLIST_H_
#include "LinkNode.h"
class LinkList
{
public:
LinkList();
~LinkList();
void InsertHead(int num);
void InsertTail(int num);
void InsertMid(int where, int num);
void Display();
int Delete(int num);
int Reverse();
private:
LinkNode *head_;
};
#endif
LinkList.cpp
#include "LinkList.h"
#include <iostream>
using namespace std;
LinkList::LinkList()
{
head_ = new LinkNode;
head_->next_ = NULL;
}
LinkList::~LinkList()
{
delete head_;
}
void LinkList::InsertHead(int num)
{
LinkNode *newnode = new LinkNode(num);
newnode->next_ = head_->next_;
head_->next_ = newnode;
}
void LinkList::InsertTail(int num)
{
LinkNode *newnode = new LinkNode(num);
LinkNode *temp = head_;
while(temp->next_ != NULL)
{
temp = temp->next_;
}
temp->next_ = newnode;
newnode->next_ = NULL;
}
void LinkList::InsertMid(int where,int num)
{
LinkNode *newnode = new LinkNode(num);
LinkNode *temp = head_;
while(temp != NULL)
{
if(temp->data_ == where)
{
newnode->next_ = temp->next_;
temp->next_ = newnode;
}
temp = temp->next_;
}
}
int LinkList::Delete(int num)
{
LinkNode *ptr = head_;
LinkNode *temp = ptr->next_;
while(temp != NULL)
{
if(temp->data_ == num)
{
ptr->next_ = temp->next_;
delete temp;
temp = NULL;
return 0;
}
ptr = temp;
temp = temp->next_;
}
}
int LinkList::Reverse()
{
if(head_->next_ == NULL || head_->next_->next_ == NULL)
{
return -1;
}
LinkNode *ptr = head_;
LinkNode *str = ptr->next_;
LinkNode *temp = str->next_;
while(temp != NULL)
{
str->next_ = ptr;
ptr = str;
str = temp;
temp = temp->next_;
}
str->next_ = ptr;
head_->next_->next_ = NULL;
head_->next_ = str;
}
void LinkList::Display()
{
LinkNode *temp = head_->next_;
while(temp != NULL)
{
cout << "node.data:" << temp->data_ << endl;
temp = temp->next_;
}
}
main.cpp
#include <iostream>
#include "LinkNode.h"
#include "LinkList.h"
using namespace std;
int main()
{
LinkList link;
int num;
int i;
for(i = 1; i <= 10; i++)
{
//link.InsertTail(i);
link.InsertHead(i);
}
link.InsertMid(5,12);
link.Display();
link.Delete(3);
cout << "After changing:" << endl;
link.Display();
link.Reverse();
cout << "Reversed:" << endl;
link.Display();
return 0;
}