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

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

P.S:TC1是int而WF1是浮点的,并且它们不是NULL。

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


现在,我需要更正search.prev的下一个和search.next的上一个。
我想我无法设置search.prev.next = schcurr;和seach.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;


编辑:但是,您需要执行null检查。例如,由于search.prev可能已指向链接列表的开头,所以它可能指向null。同样,如果您位于链接列表的末尾,则search.next将为null,因此,如果您执行search.next.prev = something,则实际上是在执行null.next = something并被违反。

10-08 08:35