+ -
当前位置:首页 → 问答吧 → 帮忙解释一段代码

帮忙解释一段代码

时间:2011-12-05

来源:互联网

struct ril_event {
  struct ril_event *next;
  struct ril_event *prev;

  int fd;
  int index;
  bool persist;
  struct timeval timeout;
  ril_event_cb func;
  void *param;
};

static void addToList(struct ril_event * ev, struct ril_event * list)
{
  ev->next = list;
  ev->prev = list->prev;
  ev->prev->next = ev;
  list->prev = ev;
  dump_event(ev);
}

static void removeFromList(struct ril_event * ev)
{
  dlog("~~~~ Removing event ~~~~");
  dump_event(ev);

  ev->next->prev = ev->prev;
  ev->prev->next = ev->next;
  ev->next = NULL;
  ev->prev = NULL;
}

求解释链表对结构体ril_event的添加和删除操作,
是双链表的添加和删除吗?
我觉得不是,自己画了示意图,感觉不对。
求解释这是什么链表,主要讲解addToList()和removeFromList()。

作者: msm8660   发布时间: 2011-12-05

是双向链表啊
addToList在list之前插入ev
removeFromList删除节点ev

作者: ouyh12345   发布时间: 2011-12-05

addToList
假设原来的结构是prev--list,现在要在list前插入ev,使之成为prev--ev--list
ev->next = list; 使ev的后继为list
ev->prev = list->prev; 使prev成为ev的前驱
ev->prev->next = ev; 使prev的后继为ev
list->prev = ev; 使list的前驱为ev

作者: ouyh12345   发布时间: 2011-12-05

引用 1 楼 ouyh12345 的回复:
是双向链表啊
addToList在list之前插入ev
removeFromList删除节点ev


++

作者: hbysjw   发布时间: 2011-12-05

双向链表
C/C++ code

/*在list节点前插入节点ev,该双向链表应该是循环的*/
static void addToList(struct ril_event * ev, struct ril_event * list)
{
  ev->next = list;
  ev->prev = list->prev;
  ev->prev->next = ev;
  list->prev = ev;
  dump_event(ev);
}
/*删除ev节点*/
static void removeFromList(struct ril_event * ev)
{
  dlog("~~~~ Removing event ~~~~");
  dump_event(ev);

  ev->next->prev = ev->prev;
  ev->prev->next = ev->next;
  ev->next = NULL;
  ev->prev = NULL;
}

作者: studyCBC   发布时间: 2011-12-05