![]() ![]() ![]() ![]() |
|||||
|
|||||
樓主 黑~~ ![]()
![]() |
我在練習leetcode 題目:876. Middle of the Linked List 他主要是把後半段的linklist印出來 例如:[1,2,3,4,5] 他會印出[3,4,5] 我看到別人的解法是 [code] /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* middleNode(ListNode* head) { int count=0; ListNode* r=head; while(r) {count++; r=r->next; } //上面我懂,但下面我就不懂了 //假設linklist=[1,2,3,4,5],那count=3 //那i=1~3應該會cout出[1,2,3]為何是[3,4,5]呢? count=count/2+1; r=head; for(int i=1;i<count;i++) { r=r->next; } return r; } }; [/code] 還有我試著寫linklist並輸入 但我輸出的答案全部會變成一樣的數字,想問為甚麼呢 #include <iostream> using namespace std; struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; int main() {ListNode* head; for(int i=0;i<5;i++) { head->val=i; head->next; cout<<i<<": "<<head->val<<endl;//這裡顯示正確 } for(int i=0;i<5;i++) { cout<<head->val<<endl;//但這裡cout出來全部會變成4..... head->next; } return 0; } 請大家幫忙解惑,謝謝 |
1樓
最有價值解答
小魚 ![]() |
我的IDE執行起來會出錯,
我不知道你怎麼能夠編譯而且執行的... 而且你五次都是針對同一個指標在做動作... 改成以下這樣試試看吧 在這裡就不加delete的部分了...
本篇文章回覆於2018-08-13 15:35
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
2樓
作者回應
黑~~ ![]() |
小魚大大好:
我上面還有一個問題,想請你幫忙 以下程式 我真的不懂為何會cout出3,4,5..... [code] /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* middleNode(ListNode* head) { int count=0; ListNode* r=head; while(r) {count++; r=r->next; }//以上我懂 count=count/2+1; r=head; 開始不懂 //假設linklist=[1,2,3,4,5],那count=3 //那i=1~3應該會cout出[1,2,3]為何是[3,4,5]呢? for(int i=1;i<count;i++) { r=r->next; } return r; } }; [/code]
本篇文章回覆於2018-08-13 16:08
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
3樓
作者回應
黑~~ ![]() |
對了,還有想問
為何還要多一個 ListNode* node = head; 不事都linklist,怎麼不head一個用到底 為何cout還要換成node呢? 謝謝
本篇文章回覆於2018-08-13 16:11
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
4樓 |
因為要記住head,
不能夠把head改掉, 否則你就會不知道開頭在哪裡。
本篇文章回覆於2018-08-13 16:17
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
5樓
作者回應
黑~~ ![]() |
大大好,
能不能幫我看一下我寫再2樓的問題呢? 感激不盡
本篇文章回覆於2018-08-13 16:28
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
6樓 |
稍微修改了一下,
你那段只有取得第3個項目, 它應該是從第3個項目一直往下輸出... 不過感覺第一次產生資料的部份怪怪的...
本篇文章回覆於2018-08-13 16:32
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
7樓
作者回應
黑~~ ![]() |
小魚大大:
抱歉 我還是不懂這段QQ 為何i=1~3不會cout出[1,2,3],而是[3,4,5]呢....?
本篇文章回覆於2018-08-13 16:55
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
8樓 |
你用逐步執行下去跑看看...
那個函數其實只回傳一筆資料而已...
本篇文章回覆於2018-08-13 17:48
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
9樓
作者回應
黑~~ ![]() |
小魚大大:
想再請教 為何要強調i!=4呢? 謝謝
本篇文章回覆於2018-08-16 10:08
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
10樓 |
這樣才不會多一筆,
不過這種宣告的方式感覺怪怪的, 你有去看你之前參考的那個人是怎麼寫的嗎?
本篇文章回覆於2018-08-16 19:29
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
11樓 |
跟你說一下我的作法吧,
我通常不會這樣子宣告, 而是會用另外一個class來使用, class底下有一個 ListNode *head; 一開始是NULL, 新增了之後next是NULL, 判斷head是NULL就表示沒資料, 不過新增修改刪除還要配合new跟delete, 處理起來有點麻煩也很容易出錯, 現在C++有vector及其他類別幫忙處理動態陣列, 我現在都直接用C++提供的了, 就不需要這麼麻煩了...
本篇文章回覆於2018-08-18 10:53
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
12樓
作者回應
黑~~ ![]() |
了解了,小魚大大
我會再研究看看 抱歉最近被叫去做很多事 太忙,所以現在才看到大大的補充
本篇文章回覆於2018-08-21 10:10
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
回覆 |
如要回應,請先登入. |