1

假设我正在实现一个链表项目,并且我构造了一个节点:

    struct node{

    node *prev;
    node *next;
    int data
    };
   node *sentinel;

每次我使用 add() 方法时,它都会在列表中不断添加元素,例如:

add(1);  //First node
add(2);  //Second  node
add(3);  //Third node
add(4);  //Fourth node
add(5);  //Fifth node;

所以在我完成添加之后,我想做一个测试让我们说:

node *temp = sentinel->next;

那么 temp 是否指向第一个元素?如果我这样做怎么办:

node *temp = (sentinel->next)-next;

它现在是否指向第二个元素?

如果是,为什么?主要目的是什么

node *sentinel; 

我刚开始自学 C++。我将非常感谢你们的回答。

   Edit:

我将有一个构造函数将哨兵初始化为:哨兵=新节点();

我会说我的 add() 方法是这样的;

add(int data, index)

{

 sentinel *temp = (sentinel->head); //Lets say temp points to the head of list here.
 node *toAdd = new node(); 
 toAdd->data = data;
 toAdd->next -> temp;
 temp->next = toAdd;

}

4

2 回答 2

3

哨兵*温度=(哨兵->头);我认为这条线不正确。因为你没有在 struct 中初始化 head。所以你只需初始化 sateniel=null;

toAdd->data=data
\\then add
if(sateniel==null)
{
 sateniel=toAdd;
  sateniel->prev=null;
  node *temp=sateniel;
}
else
{
  toAdd->prev -> temp; 
  temp->next = toAdd;
  temp=toAdd;
}

然后尝试遍历列表

于 2013-10-02T04:54:28.743 回答
1

执行后node *temp = (sentinel->next)->next;,假设有第三个元素, temp 应该指向它。这是因为sentinel变量总是指向列表的第一个元素,所以我们不会丢失这个指针。这假定您的 add 方法通过设置标记值,然后是最后一个元素的下一个指针来工作。

作为示例添加方法:

void add(int data){
   //If the list is empty, set the sentinel value
   if(sentinel == 0){
       sentinel = new node();
       sentinel->data = data;
       sentinel->next = 0;
   }
   else{
      //Else, find the last element
      node* temp;
      //Loops until nodes next is null (node is last node)
      for(temp = sentinel;temp->next != 0;temp = temp->next);

      //Create the next node and set it to next
      temp->next = new node();
      temp->next->data = data;
      temp->next->next = 0;
   }
}
于 2013-10-02T03:59:36.030 回答