插入链表伪代码

时间:2013-03-27 09:13:15

标签: algorithm insert linked-list pseudocode doubly-linked-list

在算法简介Ed 3中,我读了伪代码算法,用于在链表中插入元素,我不明白中间步骤。

x.prev = L.head
if L.head != NIL
    L.head.prev = x
L.head = x
x.prev = NIL

如果我的原始链表是HEAD -- 4 -- 24,我了解步骤如下:

  1. HEAD - 4 - 24

  2. x - 4 - 24

  3. HEAD - x - 4 - 24

  4. 2.对应

    x.prev = L.head
    

    为什么我们必须在

    之前插入x
     if L.head != NIL
            L.head.prev = x
    

    smbdy能澄清吗?

2 个答案:

答案 0 :(得分:1)

提示就是

  

L:head:pre表示L:head的对象的pre属性   指向

然后,算法如下

    //HEAD -- 4 -- 24

    x.next = l.head
    if L.head != NIL
        L.head.prev = x

    //x -- 4 -- 24

    L.head = x
    x.prev = NIL

   //HEAD -- x -- 4 --24

答案 1 :(得分:1)

让我们说,Initial Head指向节点[Y],这意味着[Y]是当前的头部。我们将插入新节点[X],它将成为我们列表的头节点,因此头指针将​​指向[X]。

请记住,在开始时(在向列表中插入任何内容之前),Head将指向NiL。

现在让我们一步一步地使用伪代码来查看发生了什么:

我们列表的当前情况是:Head -> [Y], [Y].prev -> NiL,因为head指向[Y],所以在我们更改Head指针之前,每当我们使用Head时你都可以将它读作[Y]。现在当前的头节点[Y]将在[X]之后,所以让我们设置下一个[X] = [Y]

1. x.next = L.head  

在第一句话后,我们有[X].next->[Y], Head->[Y], [Y].prev->NiL

2. if (L.head != NIL) //At the beginning Head might be pointing to NiL, and of course NiL.prev does not exist and we do not want to access illegal location.
    3. L.head.prev = x //if head is not pointing to Nil then it is pointing to [Y],
                       //in that case [X] will be the prev node of [Y], 
                    //so after this line, have Head->[Y], [X].next->[Y], [Y].prev->[X]  

在第3行之后,我们可以安全地将列表头指针设置为指向[X]

4. L.head = x    
5. x.prev = NIL //You can write L.head.prev = NIL, as [X] is now the new head