台灣最大程式設計社群網站
線上人數
1939
 
會員總數:244807
討論主題:188841
歡迎您免費加入會員
討論區列表 >> C/C++ >> c++ linklist 問題
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
c++ linklist 問題
價值 : 50 QP  點閱數:480 回應數:12

樓主

黑~~
門外漢
0 20
572 46
發送站內信

想請教linklist的問題

我在練習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;
}

請大家幫忙解惑,謝謝





搜尋相關Tags的文章: [ C++ ] , [ linklist ] , [ leetcode ] ,
本篇文章發表於2018-08-13 13:46
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
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
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.