文章目录
参考左神上课所讲内容,所使用语言为C++
1.单链表的基本操作
包含单链表的创建(头插法,尾插法),链表打印,删除链表结点等操作,要注意边界条件
list.h
#ifndef _LIST_H_
#define _LIST_H_
#include <iostream>
using namespace std;
typedef int ElementType;//数据类型
class Node{
public:
Node(){
next = NULL;}
ElementType data;
Node* next;
};
class List{
public:
List();
virtual ~List();
/*链表相关操作*/
void insertHead(ElementType data);//头插法
void insertTail(ElementType data);//尾插法
bool insertNext(Node* node,ElementType data);//把数据插入到结点node的后面
bool deleteNode(Node* node);//删除结点
void displayList();//从头打印链表元素
void reverse();//反转链表
Node* Find(int num);//返回第num个结点
Node* Search(ElementType data);//查找数据为data的结点
/*获取链表长度和头尾结点方法*/
int listLengh(){
return size;}
Node* headNode(){
return pHead;}
Node* tailNode(){
return pTail;}
private:
size_t size;
Node* pHead;//头结点指针
Node* pTail;//尾节指针
};
#endif
list.cpp
#include "list.h"
typedef int ElementType;//数据类型
List::List(){
size = 0;
pHead = new Node();
pTail = pHead;
}
List::~List(){
while(size > 0){
deleteNode(pHead);
}
delete pHead;
pHead = NULL;
}
/*链表相关操作*/
void List::insertHead(ElementType data){
Node* node = new Node();
node->data = data;
if(size == 0)
pTail = node;
node->next = pHead->next;
pHead->next = node;
size++;
}
void List::insertTail(ElementType data){
Node* node = new Node();
node->data = data;
node->next = pTail->next;///
pTail->next = node;
pTail = pTail->next;
size++;
}
bool List::insertNext(Node* node,ElementType data){
//把数据插入到结点node的后面
if(node == NULL)
return false;
Node* p = new Node();
p->data = data;
p->next = node->next;
node->next = p;
if(node == pTail)//插入的结点为尾部时,移动尾部指针
pTail = p;
size++;
return true;
}
bool List::deleteNode(Node* node){
//删除结点node后面的结点
if(NULL == node || NULL == node->next)
return false;
Node *p = node->next;
node->next = node->next->next;
delete p;
size--;
return true;
}
void List::displayList(){
//从头打印链表元素
Node* p = pHead->next;
while(p != NULL){
cout << p->data << " " ;
p = p->next;
}
cout << endl;
}
void List::reverse(){
//反转链表
if(size < 2)
return;
//pre是p的前序结点,post是p的后序结点
Node* pre = pHead->next;
Node* p = pre->next;
Node* post =