[問題] 針對pointer設pointer變數

作者: s860418 (水肅)   2018-06-08 11:05:27
開發平台(Platform): (Ex: Win10, Linux, ...)
Unix
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
GCC-6.2.0
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
No
問題(Question):
小弟最近在leetcode上練功
自己有寫出答案,但是跑得不夠快,看一下其他高手寫的
我看到一段程式碼,他是這樣寫
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* deleteDuplicates(ListNode* head) {
if (head == NULL || head -> next == NULL){
return head;
}
*[1;33ListNode* current = head;*[m
while (current -> next != NULL){
if (current -> val == current -> next -> val){
current -> next = current -> next -> next;
}
else{
current = current -> next;
}
}
*[1;33return head;*[m
}
};
看一下標色的字,這邊新設一個pointer變數current,assign head進來
但是return是return head
想請問一下,是不是這種設法,就是會讓current的值和head連動?
這種編法術語是什麼呢?
他的好處在哪裡呢?謝謝
餵入的資料(Input):
Input: 1->1->2
預期的正確結果(Expected Output):
Output: 1->2
錯誤結果(Wrong Output):

程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔)
如上
補充說明(Supplement):
leetcode 83題
作者: jerryh001   2018-06-08 11:43:00
兩個無關 這樣的好處... 樓下說他知道 XD
作者: MOONRAKER (㊣牛鶴鰻毛人)   2018-06-08 11:48:00
我只知道你顏色跑掉了 esc要用Ctrl-U輸入(對嗎?)
作者: cutekid (可愛小孩子)   2018-06-08 11:57:00
沒有連動唷,將重複值的link拔掉後,回傳 list 的開頭
作者: elements (Helianthus annuns)   2018-06-08 16:29:00
這題目看起來很簡單 你寫不夠快應該是因為你的演算法複雜度太高 然後這不是什麼特殊技巧 就只是用另一個指標去操作 list
作者: kaneson (Lance)   2018-06-08 17:44:00
return的問題在於傳head進去, 操作head以外的東西時沒什麼問題,而如果改到head的話就需要一個固定管道傳出來,方法有return head, 傳參數用指標的指標或pass by reference等, 一般list操作最make sense的是return head, 在其他做法或應用時不得已(return不夠用之類的)再考慮其他做法

Links booklink

Contact Us: admin [ a t ] ucptt.com