链表-使用后部指针末尾插入

时间:2018-09-18 15:53:29

标签: c++ c linked-list singly-linked-list

我正在学习有关链表插入的知识,并遇到了以下代码,以便在链表的末尾插入一个节点(在C ++仍然使用的一本相当陈旧且过时的书中,我不知道为什么):

void Insert_End(Node * np){
    if (start == NULL){
        start = rear = np;
    }
    else{
        rear -> next = np;
        rear = np;
    }
}

我的问题是     np->下一个=后方;

PS:np是要在末尾插入的新节点,后方指向最后一个节点,起始点指向第一个节点。

2 个答案:

答案 0 :(得分:2)

  

我的问题是不是应该是np-> next = Rear;

不,下面的图片可以帮助您轻松理解。

首次执行start = rear = np;时,所有3个节点都可能如下所示。

  ------
  |  np  |
   ------
  ^      ^
  |       |
 ----      ----
|start|   | rear|
 ----      ----

连续插入:

当您rear -> next = np;时,您的列表可能如下所示。

请注意:rear仍指向列表的最后一个节点,而np1则指向np2

  ------         -----
  |  np1 | ---> | np2 |
   ------        -----
  ^       ^
  |       |
 ----      ----
|start|   | rear|
 ----      ----

rear = np;执行时,您的rear将更新为指向当前的最后一个节点。

  ------         -----
  |  np1 | ---> | np2 |
   ------        -----
  ^              ^
  |              |
 ----           ----
|start|        | rear|
 ----           ----

答案 1 :(得分:0)

  

我的问题是不是应该是np-> next = Rear;

否,因为届时将没有节点指向Worked Class,因此它不会成为任何列表的一部分(头为Text5的列表除外)。此外,A不会在后面,因为它的np会指向一个节点(先前为np的节点)。该示例是正确的实现。