将节点添加到链接列表的前面

时间:2013-10-05 05:08:36

标签: c++

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

我有功能

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

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

4 个答案:

答案 0 :(得分:13)

这就是你的名单(假设)

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

Head指向位置A

您创建一个新节点

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

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

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

然后您将head指向B而不是A

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

head& tmp现在指向B

答案 1 :(得分:1)

  

所以当我们做行tmp-> next = head,我们正在使tmp指针指向head指向的内容(列表的当前第一个元素)?因为这就是它的感觉,

正确。

  

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

没有。要指向头部,它需要包含头部的地址。但是这一行使它包含头部的。所以没有。

  

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

答案 2 :(得分:0)

    public class CallMeServiceAsyncTask extends AsyncTask<String, Void, List<Service>> {
    @Override
    protected List<Service> doInBackground(String... params) {
        CallmeService service= ServiceFactory.getCallmeService();
        List<Service> services= service.getAllServices(); //Calls web service and Parses Json Response
        return services;
    }
   }

答案 3 :(得分: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的指针设置为指向新节点而不是前一节点