链表的指针

时间:2013-10-02 03:54:30

标签: c++

假设我正在实现一个链接列表项目,并构建一个节点:

    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;

临时指向第一个元素吗? 如果我这样做:

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

现在临时指向第二个元素吗?

如果是,为什么?

的主要目的是什么?
node *sentinel; 

我刚开始自学C ++。我真的很感谢你们的回答。

   Edit:

我将有一个构造函数初始化sentinel as:sentinel = new node();

我会说我的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;

}

2 个答案:

答案 0 :(得分:3)

sentinel * temp =(sentinel-> 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;
}

然后尝试浏览列表

答案 1 :(得分:1)

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

作为示例添加方法:

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;
   }
}