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

时间:2012-12-15 16:08:39

标签: c doubly-linked-list

我有三个相同类型的链表节点,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;

1 个答案:

答案 0 :(得分:1)

如果您的双向链接列表是正确的,那么您可以从搜索节点(prev和next)遍历两种方式,那么您可以完全按照您的说法进行操作。

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

编辑:但是,如果执行此操作,则需要进行空检查。例如,如果你已经在链接列表的头部,search.prev可以指向null。同样,如果您位于链接列表的末尾,search.next将为空,那么如果您执行search.next.prev = something,则您实际上会null.next = something执行并违反。