0

我有三个相同类型的链表节点,schcurr、search 和 schtemp。但是只有搜索有链接。schcurr 和 schtemp 没有链接。我使用搜索来找到我想放置 schcurr 的地方,我使用 schtemp 只是为了帮助我保持链接。如果以下条件成立,则 schcurr 支配搜索。所以,我想用 schcurr 替换搜索。搜索已经在列表中,而 schcurr 尚未连接到任何东西。

我把代码的相关部分如下,但我被困在那里:(

PS: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; 和 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;
4

1 回答 1

1

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

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

编辑:但是,如果你这样做,你需要做空检查。因为search.prev,例如,如果你已经在你的链表的头部,它可能指向 null 。同样,如果您位于链表的末尾,search.next则为空,因此如果您这样做search.next.prev = something,您实际上是在做null.next = something并且违反了。

于 2012-12-15T17:45:18.393 回答