我有三个相同类型的链表节点,schcurr,search和schtemp.However只有搜索有链接。 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;
答案 0 :(得分:1)
如果您的双向链接列表是正确的,那么您可以从搜索节点(prev和next)遍历两种方式,那么您可以完全按照您的说法进行操作。
search.prev.next = schcurr;
search.next.prev = schurr;
编辑:但是,如果执行此操作,则需要进行空检查。例如,如果你已经在链接列表的头部,search.prev
可以指向null。同样,如果您位于链接列表的末尾,search.next
将为空,那么如果您执行search.next.prev = something
,则您实际上会null.next = something
执行并违反。