4

我真的很困惑这里到底发生了什么..

我有这个功能

void addToFront(int data)  
{
  Node* tmp = new Node();
  tmp -> data = data;
  tmp -> next = head;
  head = tmp;
}

因此,当我们执行 line 时tmp-> next = head,我们正在使tmp指针指向所head指向的内容(列表的当前第一个元素)?因为这就是它的感觉,但这不是让它指向head吗?然后当我们这样做时head = tmp,我们将 head 指向我们创建的新节点,对吗?

4

4 回答 4

13

这就是你的清单(假设)

 +----+-----+   +-----+-----+   +-----+------+
 |  A |     +-->|     |     +-->|     |      |
 +----+-----+   +-----+-----+   +-----+------+
 /

Head是指向位置A

你创建一个新节点

 +----+----+
 | B  |    |
 +----+----+
 /

tmp现在指向B. 您在 中插入数据tmp->data,然后制作tmp -> next = head;. 所以现在我们有:

 +----+----+     +----+-----+   +-----+-----+   +-----+------+
 | B  |next|---->|  A |     +-->|     |     +-->|     |      |
 +----+----+     +----+-----+   +-----+-----+   +-----+------+
                  /

然后你让head指向B而不是A

 +----+----+     +----+-----+   +-----+-----+   +-----+------+
 | B  |next|---->|  A |     +-->|     |     +-->|     |      |
 +----+----+     +----+-----+   +-----+-----+   +-----+------+
 /  \

head&tmp指向B现在。

于 2013-10-05T05:22:44.417 回答
1

因此,当我们执行 tmp-> next =head 行时,我们正在使 tmp 指针指向 head 所指向的对象(列表的当前第一个元素)?因为就是那种感觉,

正确的。

但这不是让它指向头部吗?

不。要指向头,它需要包含头的地址。但是这一行使它包含了head 的。所以不行。

然后当我们执行 head = tmp 时,我们将 head 指向我们创建的新节点,对吗?

是的。

于 2013-10-05T05:13:19.430 回答
0
void addToFront(int data) {
  Node* tmp = new Node(t); //assume your Node constructor can handle this
  if(numElements != 0) {   //should check weather empty or not
    x->next = head;        //link them first
    head = x;             //and now make the head point to the new head
  } else {      //if empty you should also set the tail pointer
    head = x;
    tail = x;
  }
  numElements++;
}

如果有一个头,则新节点“next”将指向当前指向另一个节点的头。然后head=x,现在将名为head的指针设置为指向新节点而不是前一个节点

于 2016-10-16T09:45:06.083 回答
0
#include<iostream>
using namespace std;
struct Node
{
    int data;
    Node *link;
};
class LinkList
{
    Node *headptr;
public:
    LinkList()
    {
        headptr=NULL;
    }

    void InsertatFirst(int val)
    {
        Node *newNode;
        newNode = new Node;
        newNode ->link =NULL;
        newNode ->data = val;
        newNode ->link=headptr;
        headptr = newNode;
    }

    void Display()
    {
        Node *disNode;
        disNode = headptr;
        while(disNode !=NULL)
        {
            cout<<"Display Node Value is "<<disNode ->data<<endl<<endl;
            disNode =  disNode->link;
        }
    }

};
void main()
{
    LinkList lobj;
    lobj.InsertatFirst(45);
    lobj.InsertatFirst(2);
    lobj.InsertatFirst(1);
    lobj.InsertatFirst(0);
    lobj.InsertatFirst(-1);
    lobj.Display();
}
于 2016-01-16T12:33:30.583 回答