我有三个相同类型的链表节点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
并被违反。