链表-05_双向链表

一、说明

二、代码

main.cpp
#include <iostream>
#include "DoubleLinkedList.h"

using namespace std;

int main()
{
    cout << "双向链表" << endl;

    DoubleLinkedList intList;//创建新链表
    DoubleLinkedNode *node_1 = new DoubleLinkedNode();//创建新节点
    DoubleLinkedNode *node_2 = new DoubleLinkedNode();
    DoubleLinkedNode *node_3 = new DoubleLinkedNode();
    DoubleLinkedNode *node_4 = new DoubleLinkedNode();
    DoubleLinkedNode *node_5 = new DoubleLinkedNode();

    node_1->data = 10;
    node_2->data = 20;
    node_3->data = 30;
    node_4->data = 40;
    node_5->data = 50;

    intList.Insert(node_1,intList.first);
    intList.Insert(node_2,intList.first);
    intList.Insert(node_3,intList.first);
    intList.Insert(node_4,intList.first);
    intList.Insert(node_5,intList.first);
    intList.Delete(node_4);

    cout<<intList.first->rlink->data<<endl;
    cout<<intList.first->rlink->rlink->data<<endl;
    cout<<intList.first->rlink->rlink->rlink->data<<endl;
    cout<<intList.first->rlink->rlink->rlink->rlink->data<<endl;

//    cout<<intList.first->rlink->rlink->rlink->rlink->llink->data<<endl;
    return 0;
}
DoubleLinkedList.h
#ifndef _DOUBLELINKEDLIST_H
#define _DOUBLELINKEDLIST_H

#include <iostream>

using namespace std;

class DoubleLinkedList;//双向链表前置声明

/*双向链表节点*/
class DoubleLinkedNode//双向链表节点
{
    friend class DoubleLinkedList;

public:
    int data;//节点数据域
    DoubleLinkedNode *llink;//节点左指针
    DoubleLinkedNode *rlink;//节点右指针

};

/*双向链表类*/
class DoubleLinkedList
{
public:
    DoubleLinkedList()//双向链表类的构造函数
    {
        first = new DoubleLinkedNode();//创建表头结构的first节点
        first->llink = first->rlink = first;
    }

    void Insert(DoubleLinkedNode *,DoubleLinkedNode *);//新节点插入到节点的右边
    void Delete(DoubleLinkedNode *);//删除节点

//private:
    DoubleLinkedNode *first;//表头结构
};

/*双向链表类:插入函数*/
//newNode节点插入到x节点的右边
void DoubleLinkedList::Insert(DoubleLinkedNode *newNode,DoubleLinkedNode *x)
{
    newNode->llink = x;
    newNode->rlink = x->rlink;
    x->rlink->llink = newNode;
    x->rlink = newNode;

}

/*双向链表类:删除节点*/
void DoubleLinkedList::Delete(DoubleLinkedNode *x)
{
    if(x == first)
    {
        cerr<<"Deletion of head node not permitted."<<endl;
    }
    x->llink->rlink = x->rlink;
    x->rlink->llink = x->llink;
    delete x;
}

#endif // _DOUBLELINKEDLIST_H

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值