在链表结构中的双指针

时间:2016-05-03 16:20:00

标签: c++ struct linked-list

我是c ++的新手,我正在学习链表。但是,我遇到了一些麻烦。

对于正常情况,当我们定义链表时,这里是节点结构:

struct Node{

   int data;

   Node* next;

};

但是,当结构变为这样时,我们如何定义链表:

struct Node{

   int data;

   Node** next; // Double pointer instead

};

我对双指针很困惑,我们应该分配给" next"? 例如,当我们在开头插入节点时,当我们将head的值赋给newPtr->next时:

newPtr->next = &head?是吗?

谢谢你们所有人。

1 个答案:

答案 0 :(得分:0)

我不确定这个,但我只是想分享我的想法,因为我也开始学习指针。如果我错了,请纠正我。

#include <iostream>

int main()
{
	int **p = new int*; // Pointer to a pointer.
	int *q = new int; // Pointer.
	
	// Assigning the value of 5 to where q points to. 
	// The "*" is used as a dereference operator
	// meaning that it assigns 5 to where q is pointing to.
	*q=5;
	
	// Here you are pointing p to point to q.
	// That is why it is called a pointer to a pointer.
	// The "*" here is used as pointer to point to another pointer.
	*p=q;

	// Then here you can access the value of the p by dereferencing 
	// it twice.
	
	std::cout << **p << std::endl;
	
	// Outputs 5.
	
	return 0;
}

正如其他人在评论中所说的那样,你正在创建一个指向指针的指针。 int * p表示它可以直接指向数据,而int ** q表示它可以指向另一个指针,在本例中为* p。 *的数量表示你的深度。假设您希望Node有两个指针,那么您必须执行以下操作:

struct Node
{
  int data;
  Node *next, *prev;
} 

它也被称为双链表。你可以前进和后退的地方。