- 获取当前游标指向的数据元素
- 将游标重置指向链表中的第一个数据元素
- 将游标移动指向到链表中的下一个数据元素
- 将游标移动指向到链表中的上一个数据元素
-
直接指定删除链表中的某个数据元素
双向链表重要技术场景
循环链表插入结点技术场景
循环链表删除结点技术场景
优点:双向链表在单链表的基础上增加了指向前驱的指针
功能上双向链表可以完全取代单链表的使用
双向链表的Next,Pre和Current操作可以高效的遍历链表中的所有元素
缺点:代码复杂代码示例:
dlinklist.h// 双向链表API声明 #ifndef _DLINKLIST_H_ #define _DLINKLIST_H_ typedef void DLinkList; typedef struct _tag_DLinkListNode { _tag_DLinkListNode *next; _tag_DLinkListNode *pre; }DLinkListNode; // 创建链表 DLinkList* DLinkList_Create(); // 销毁链表 void DLinkList_Destroy(DLinkList *list); // 清空链表 void DLinkList_Clear(DLinkList *list); // 获取链表长度 int DLinkList_Length(DLinkList *list); // 在pos位置,插入结点node int DLinkList_Insert(DLinkList *list, DLinkListNode *node, int pos); // 获取pos位置的结点,返回给上层 DLinkListNode* DLinkList_Get(DLinkList *list, int pos); // 删除pos位置的结点 DLinkListNode* DLinkList_Delete(DLinkList *list, int pos); // 删除值为node的结点 DLinkListNode* DLinkList_DeleteNode(DLinkList* list, DLinkListNode* node); // 重置游标 DLinkListNode* DLinkList_Reset(DLinkList* list); // 获取当前游标所指的结点 DLinkListNode* DLinkList_Current(DLinkList* list); // 获取游标当前所指结点,然后让游标指向下一个结点 DLinkListNode* DLinkList_Next(DLinkList* list); // 获取游标当前所指结点,然后让游标指向前一个结点 DLinkListNode* DLinkList_Pre(DLinkList* list); #endif













