首页 > 其他分享 >双向链表

双向链表

时间:2024-03-17 21:44:07浏览次数:18  
标签:rt insert list param next 链表 双向 prev

rt_inline void rt_list_init(rt_list_t *l)
{
  l->next = l->prev = l;
}

/**
* @brief insert a node after a list
*
* @param l list to insert it
* @param n new node to be inserted
*/
rt_inline void rt_list_insert_after(rt_list_t *l, rt_list_t *n)
{
  l->next->prev = n;
  n->next = l->next;

  l->next = n;
  n->prev = l;
}

/**
* @brief insert a node before a list
*
* @param n new node to be inserted
* @param l list to insert it
*/
rt_inline void rt_list_insert_before(rt_list_t *l, rt_list_t *n)
{
  l->prev->next = n;
  n->prev = l->prev;

  l->prev = n;
  n->next = l;
}

/**
* @brief remove node from list.
* @param n the node to remove from the list.
*/
rt_inline void rt_list_remove(rt_list_t *n)
{
  n->next->prev = n->prev;
  n->prev->next = n->next;

  n->next = n->prev = n;
}

/**
* @brief tests whether a list is empty
* @param l the list to test.
*/
rt_inline int rt_list_isempty(const rt_list_t *l)
{
  return l->next == l;
}

/**
* @brief get the list length
* @param l the list to get.
*/
rt_inline unsigned int rt_list_len(const rt_list_t *l)
{
  unsigned int len = 0;
  const rt_list_t *p = l;
  while (p->next != l)
  {
    p = p->next;
    len ++;
  }

  return len;
}

 

                      rt_list_insert_before

                      rt_list_insert_after

 

标签:rt,insert,list,param,next,链表,双向,prev
From: https://www.cnblogs.com/wang-1962918321/p/18079254

相关文章

  • 链表 Linked List
    2024.3.15芝士wa参考视频:bilibli-数据结构-链表“印度小哥讲得真好”链表对于链表来说,存储数据需要两个部分,一是数据本身,二是指针,该指针指向下一个数据的地址,依次链接,直到最后一个元素,指针指向空(NULL)遍历的时间复杂度为O(n)插入的时间复杂度为O(n)删除的时间复......
  • 5.合并两个有序链表
    链表合并B站左程云讲解连接链表结构publicstaticclassListNode{publicintval;publicListNodenext;publicListNode(intval){this.val=val;}publicListNode(intval,ListNodenext){......
  • leetcode 21 合并两个有序链表
    https://www.bilibili.com/video/BV1xa411A76q?p=4&vd_source=cdfcf738e0429ec2cffe4778dd8dd0e4 #迭代#https://blog.csdn.net/m0_61661179/article/details/127205244classSolution:defmergeTwoLists(self,list1:Optional[ListNode],list2:Optional[List......
  • 数据结构(二)双链表---以题为例
    实现一个双链表,双链表初始为空,支持 5 种操作:在最左侧插入一个数;在最右侧插入一个数;将第 k 个插入的数删除;在第 k 个插入的数左侧插入一个数;在第 k 个插入的数右侧插入一个数现在要对该链表进行 M 次操作,进行完所有操作后,从左到右输出整个链表。注意:题目中第 ......
  • 电路方案分析(十八)四开关buck-boost双向同步DC/DC变换器方案
    tip是:资料来自网络,仅供学习交流使用!1.概述4开关降压升压双向DC-DC电源转换器在很多应用中都有使用。作为一个同步降压或同步升压转换器,其中只有两个开关切换,开关损耗减少到一半。只有当直流母线和电池电压彼此接近,然后转换器作为一个同步降压-升压转换器,其中所有四个开关......
  • 滴水逆向笔记系列-c++总结4-41.new-delete-vector-42.链表
    第四十课c++8new-delete-vector1.内存空间复习在类外函数外的变量就是全局变量,程序一编译地址就已经确定了的临时数据,参数和局部变量就是在堆栈里而使用malloc函数动态申请的则是在堆里2.跟踪调试反汇编函数我们调用malloc函数申请内存,但是不是malloc一个函数完成整个......
  • 141. 环形链表c
    /***Definitionforsingly-linkedlist.*structListNode{*intval;*structListNode*next;*};*/boolhasCycle(structListNode*head){structListNode*slow=head;structListNode*fast=head;while(fast&&fast->......
  • 234. 回文链表c
    /***Definitionforsingly-linkedlist.*structListNode{*intval;*structListNode*next;*};*/structListNode*pre;booljudge(structListNode*head){if(!head)returntrue;booltemp=judge(head->next);if(!temp)r......
  • 83. 删除排序链表中的重复元素c
     /***Definitionforsingly-linkedlist.*structListNode{*intval;*structListNode*next;*};*/intpre;structListNode*f(structListNode*head){if(!head)returnNULL;if(head->val==pre){structListNode*tem......
  • 21. 合并两个有序链表c
    /***Definitionforsingly-linkedlist.*structListNode{*intval;*structListNode*next;*};*/structListNode*mergeTwoLists(structListNode*list1,structListNode*list2){structListNode*root=NULL;if(!list1)returnl......