c - 如何替换双向链表中的元素

标签 c doubly-linked-list

我有三个相同类型的链表节点,schcurr、search 和 schtemp。但是只有 search 有链接。 schcurr 和 schtemp 未链接。我使用搜索来查找要放置 schcurr 的位置,并且使用 schtemp 只是为了帮助我保留链接。 如果满足以下条件,则 schcurr 将主导搜索。所以,我想用 schcurr 代替搜索。搜索已在列表中,并且 schcurr 尚未连接到任何内容。

我将代码的相关部分如下,但我卡在那里:(

P.S: TC1 为 int,WF1 为 float,且不为 NULL。

if(schcurr.TC1==search.TC1)
    {
       if(schcurr.WF1>search.WF1)
           {                  
               //schcurr dominates search.
               schcurr.next=seach.next;
               schcurr.prev=seach.prev; 
            }
      }

现在我需要更正 search.prev 的 next 和 search.next 的 prev。 我想我无法设置 search.prev.next=schcurr;和 search.next.prev=schcurr;我可以吗?

感谢任何帮助。

有关节点的信息定义:

struct schedules{
float WF1;
int TC1;    
schedules *prev;
schedules *next;
            };
struct schedules *sch;
struct schedules *head;
struct schedules *tail;
struct schedules *schtemp;
struct schedules *search;

最佳答案

如果您的双向链表是正确的,因为您可以从搜索节点双向遍历(上一个和下一个),那么您就可以完全按照您所说的操作。

search.prev.next = schcurr;
search.next.prev = schurr;

编辑:但是,如果您这样做,则需要进行空检查。例如,如果您已经位于链接列表的开头,那么 search.prev 可能会指向 null。同样,如果您位于链接列表的末尾,search.next 将为 null,因此如果您执行 search.next.prev = some,您将有效正在做 null.next = Something 并违反规定。

关于c - 如何替换双向链表中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13893816/

相关文章:

c - 两者渐近有效

c - 为什么 "printf("%d", '0/' );"的答案是 12335?

c - 双链表冒泡排序

c++ - 双向链表的复制构造函数

c - 在C中的双向链表中插入

java - DoublyLinkedList 的 toString()

c - 如何使用c中的指针指向总行或总列

c - 理解深度优先遍历

c - 当返回值的类型与声明的返回类型不同时,返回值会怎样?

c++ - 从队列创建双向链表查找中位数与使用数组的效率