假设我正在实现一个链接列表项目,并构建一个节点:
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;
}
答案 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;
}
}