C++ 实现双向链表

本文探讨了为何要使用双向链表,指出单链表在逆序访问和直接访问前驱元素上的局限性。接着介绍了双向链表的结构,并详细说明了如何在C++中构建双向链表,包括增、删、查、改等基本操作,特别是尾部插入元素的方法。
摘要由CSDN通过智能技术生成

一.为什么要使用双向链表?
1.单链表的结点都只有一个指向下一结点的指针。
2.单链表的数据元素无法直接访问其前驱元素。
逆序访问单链表是极其耗费时间的。

void Reverse(pList* pplist)
{
    assert(pplist);
    if (*pplist==NULL)
    {
        return;
    } 
    else
    {
        pNode tail = *pplist;
        pNode cur = *pplist;
        pNode _next = cur->next;
        pNode tmp = NULL;
        while (_next!=NULL)
        {
            tmp = _next->next;
            _next->next=cur;
            cur = _next;
            _next = tmp;
        }
        tail->next = NULL;
        *pplist = cur;
    }   
}

二 .双向链表与单向链表相比,各个结点多了一个指向前一个结点的指针。结构如图所示:

这里写图片描述

下面是对双向链表的增删查改:

先是对一个双向链表的构造

#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <assert.h>
using namespace std;

typedef int DataType;

struct ListNode 
{ 
    ListNode* _next; 
    ListNode* _prev; 
    DataType _data; 

    ListNode(DataType x)
        :_data(x)
        ,_next(NULL)
        ,_prev(NULL)
    {}
}; 

class List 
{
    
    typedef ListNode Node; 
public: 
    List()
        :_head(NULL
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值