链表节点定义
typedef double LTDataType;
struct ListNode
{
struct ListNode* next;
struct ListNode* prev;
LTDataType data;
};
链表初始化
ListNode* ListInit()
{
ListNode* newNode = new ListNode();
newNode->data = NULL;
newNode->next = newNode;
newNode->prev = newNode;
return newNode;
}
销毁链表
void ListDestroy(ListNode* phead)
{
if (phead == NULL)
{
return;
}
ListNode* cur = phead->next;
while (cur != phead)
{
ListNode* node = cur->next;
delete cur;
cur = node;
}
delete phead;
phead = NULL;
}```
链表尾插
void ListPushBack(ListNode* phead, LTDataType x)
{
if (phead == NULL)
{
return;
}
ListNode* newNode = new ListNode();
newNode->data = x;
ListNode* cur = phead->prev;
cur->next = newNode;
newNode->prev = cur;
newNode->next = phead;
phead->prev = newNode;
}
链表尾删
void ListPopBack(ListNode* phead)
{
if (phead == NULL)
{
return;
}
ListNode* cur = phead->prev;
ListNode* newNode = cur->prev;
newNode->next = phead;
phead->prev = newNode;
delete cur;
}
链表头插
void ListPushFront(ListNode* phead, LTDataType x)
{
if (phead == NULL)
{
return;
}
ListNode* newNode = new ListNode();
newNode->data = x;
newNode->next = phead->next;
newNode->next->prev = newNode;
phead->next = newNode;
newNode->prev = phead;
}
链表头删
void ListPopFront(ListNode* phead)
{
if (phead == NULL)
{
return;
}
ListNode* newNode = phead->next;
newNode->next->prev = phead;
phead->next = newNode->next;
delete newNode;
}
打印链表
void ListPrint(ListNode* phead)
{
ListNode* cur = phead->next;
while (cur!= phead)
{
std::cout << cur->data << "->";
cur = cur->next;
}
std::cout << "NULL" << std::endl;
}
查找元素
ListNode* ListFind(ListNode* phead, LTDataType x)
{
if (phead == NULL)
{
return NULL;
}
ListNode* cur = phead->next;
while (cur != phead)
{
if (cur->data == x)
{
return cur;
}
cur = cur->next;
}
return NULL;
}
在pos节点位置插入一个节点
void ListInsert(ListNode* pos, LTDataType x)
{
if (pos == NULL)
{
return;
}
ListNode* newNode = new ListNode();
newNode->data = x;
newNode->prev = pos->prev;
pos->prev->next = newNode;
newNode->next = pos;
pos->prev = newNode;
}
删除pos位置的节点
void ListErase(ListNode* pos)
{
ListNode* newNode = pos->next;
pos->prev->next = newNode;
newNode->prev = pos->prev;
}
测试
void test1()
{
ListNode *phead = ListInit();
ListPushBack(phead, 1);
ListPushBack(phead, 2);
ListPushBack(phead, 3);
ListPushBack(phead, 4);
ListPushBack(phead, 5);
ListPushBack(phead, 6);
ListPrint(phead);
ListPushFront(phead,7);
ListPushFront(phead, 8);
ListPrint(phead);
ListPopFront(phead);
ListPrint(phead);
ListPopBack(phead);
ListPopBack(phead);
ListPrint(phead);
ListNode* pos = ListFind(phead,3);
if (pos != NULL)
{
ListInsert(pos,66);
ListPrint(phead);
ListErase(pos);
ListPrint(phead);
}
ListDestroy(phead);
}