2012-01-04 83 views
0

我有一個包含幾個節點的列表。我試圖通過將current->next的值聲明爲NULL來標記最終節點。將*下一個列表指針設置爲NULL

因此,假設我的current指向最終節點。以下兩個代碼片段是否以不同的方式工作,如果是,如何?

current->next = NULL; 

current = current->next; 
current = NULL; 

我一直在嘗試,現在這些了一段時間,但我真的不能明白是什麼在那裏怎麼回事。我會說他們正在做同樣的事情,因爲第二個人先將我的current指向next分,然後將其設置爲NULL

編輯:哦,我明白答案是什麼意思,現在看起來也很明顯:)。所以,如果我不使用第一種方法,但選擇去current = current->next有沒有辦法讓我把NULL值放在我應該去的地方?我如何使用我的新current來指出我的舊next指向的位置?

+0

這些是完全不同的事情。也許是一本好書的時間? – 2012-01-04 02:30:43

+0

這些顯然是有效的陳述。第一個將把'current'所尋址的節點中的下一個字段設置爲null。第二對語句會將'current'設置爲'current'所尋址節點中'next'的值,然後用null覆蓋剛剛放在'current'中的值(使前面的語句無用)。 (如果你還沒有弄清楚指針是什麼概念的話。) – 2012-01-04 02:32:30

+0

當談到指針時,我毫無希望。我已經閱讀了很多關於它們的簡單教程,我想我可以找到自己的方式,如果我正在處理簡單的整數或字符指針,但是如果它變得稍微複雜一點,我會立即丟失... – 2012-01-04 02:34:06

回答

2

前面的代碼段將current指向的結構的next字段分配給NULL。第二個片段使current指針指向由current指向的結構的next字段,然後將current設置爲NULL

我真的不明白第二種方法的用處,除非你有其他方法來獲得對結構的引用,因爲你基本上通過丟失指針來從結構中刪除自己。

因此,在前者的情況下:

current -> struct 
      next -> NULL 

在後一種情況:

current -> NULL 

      struct 
      next -> ???? 
+0

感謝您的回覆。它非常簡單。我不會失去我的結構,因爲我已經開始固定到另一個指針。我更新了我的問題。是否有可能在完成current = current-> next之後使用current來轉到NULL旁邊? – 2012-01-04 02:43:08

+0

當然,但它相當於'current-> next-> next = NULL',我不認爲這是你想要的。你可能不得不使用兩個指針 - 一個用來保存'next',另一個指向''current'',這樣你就可以在不丟失引用的情況下將'current'的'next'改爲'NULL'。 – 2012-01-04 02:55:57

+0

謝謝。我使用了第二個變量,我能夠做到我想要的。 – 2012-01-04 03:04:39

2

是的,這些是不同的,它是你想要的第一個版本。

在第二個,你只能改變局部變量current(以NULL)的值,而next指針最終節點保持不變(這也許應該首先被初始化爲NULL,但也許這就是你在做的)。

+0

謝謝你的回覆。我現在可以很清楚地看到第二部分的問題。這就是爲什麼我更新了一下我的問題。我希望你能快速瀏覽一下。 – 2012-01-04 02:44:30

+0

如果我理解你的編輯,你希望保存'next'的舊值並將其設置爲NULL(即將列表分成兩部分)。你基本上需要另一個變量來做到這一點;像'next = current-> next; current-> next = NULL;當前=下一個;'(回憶交換) – 2012-01-04 02:57:47

+0

非常感謝。第二個變量是訣竅。我會接受羅伯特的回答,因爲他早一點。 – 2012-01-04 03:04:13

相關問題