一.为什么要使用双向链表?
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