我真的很困惑这里到底发生了什么......
我有功能
void addToFront(int data)
{
Node* tmp = new Node();
tmp -> data = data;
tmp -> next = head;
head = tmp;
}
因此,当我们执行第tmp-> next = head
行时,我们将tmp
指针指向head
指向的内容(列表的当前第一个元素)?因为这就是它的感觉,但这不就是指向head
吗?然后当我们head = tmp
时,我们正在指向我们创建的新节点,对吗?
答案 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的指针设置为指向新节点而不是前一节点