2013-01-10 53 views
2

讓我說我的鏈表中的類我保持一個指向鏈表頭的指針...在C++ /鏈接列表中的指針

在我寫這個代碼的成員函數之一..

Node *cur = head; 
cur = cur->next; 

爲什麼不換頭head->next

如果我寫cur = NULL;它會使頭null

+3

那麼,什麼是* *變量? (忽略參考參數和所有爵士樂) – 2013-01-10 22:45:57

+0

爲什麼你不試試看看你會得到什麼結果? –

+0

它與'int x = 0; int y = x; y = 1;'。爲什麼'x'的值在我們賦值給'y'時不會改變? – molbdnilo

回答

2

如果你寫:

Node *cur = head; 
cur = NULL; 

然後cur將指向什麼和什麼都不會發生head

如果你寫:

Node *cur = head; 
cur = cur->next; 
cur = NULL; 

同樣的事情會發生(cur將指向什麼和什麼都不會發生head),除非headNULL,在這種情況下,你會崩潰的cur = cur->next;

如果你想通過cur指針設置head->nextNULL,你可以用下面這樣做:

Node *cur = head; 
cur->next = NULL; 

我可以看到你的困惑來自指針的本質。當您說Node *cur = head;時,您正在創建一個Node指針,指向與head相同的內存地址。如果通過cur = NULL設置cur到別的東西,那麼你只能改變什麼cur,什麼它指向,因此不值,head被單獨留在家中。

當您使用cur->next = NULL相反,你修改的什麼curnext成員。這也是head指向的next成員,因此,該變更也反映在head->next中。

+0

cur.next = NULL;這會改變目標嗎? –

+0

@MadanLal'head'和'cur'指向同一個事物,任何一個操作都會影響另一個。 –

+0

@MadanLal ...你需要使用' - >',因爲'cur'是一個指針,所以它會是'cur-> next = NULL'。 – Foggzie

1

cur是指針,cur = cur-> next;只是讓Cur點在別的地方,它爲什麼要改頭換面呢?

7

我假設headNode *。在這種情況下,當您說cur = cur->next時,您正在更改cur點的位置,但head仍將指向列表頭,因爲您沒有更改其指向的位置。

Cur----------| 
      | 
      V  next 
Head -----> Item 1--------->Item 2 

cur = cur->next產生如下:

Cur--------------------------| 
          | 
        next V  
Head -----> Item 1--------->Item 2