如何实现一个双向链表呢,这就要求每个结点里,有两个指针,一个指向前一个结点,一个指向下一个结点。
实现功能包括尾插,尾删,头插,头删,逆序,查找,插入,打印等等
话不多说直接上代码,里面解释的很详细
#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)
, _tail(NULL)
{
}
~List()
{
Node*cur = _head;
while (cur)
{
Node*del = cur;
cur = cur->_next;
delete del;
}
_head = _tail = NULL;
}
void PushBack(DataType x)//尾插
{//1.空 2.不为空
if (_tail == NULL)
{
_head = _tail = new Node(x);//记得补充结点构造函数
}
else
{
Node*tmp = new Node(x);
_tail->_next = tmp;
tmp->_prev = _tail;
_tail = tmp;