链表操作大总结!!!


参考左神上课所讲内容,所使用语言为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 = NULL;
    //处理尾部结点
    pTail = pre;
    pTail->next = NULL;
    while(p != NULL){
   
        post =
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值