我自己尝试写的,我用了两个类,其中一个是节点的类,另一个链表的类。 具体代码如下:
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_; }; #endifLinkList.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_; }; #endifLinkList.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; }