leetcode刷題系列之817. 連結串列元件
阿新 • • 發佈:2018-12-17
給定一個連結串列(連結串列結點包含一個整型值)的頭結點 head
。
同時給定列表 G
,該列表是上述連結串列中整型值的一個子集。
返回列表 G
中元件的個數,這裡對元件的定義為:連結串列中一段最長連續結點的值(該值必須在列表 G
中)構成的集合。示例 1:head: 0->1->2->3
G = [0, 1, 3] 輸出: 2 解釋: 連結串列中,0 和 1 是相連線的,且 G 中不包含 2,所以 [0, 1] 是 G 的一個元件,同理 [3] 也是一個元件,故返回 2。
示例 2:
輸入: head: 0->1->2->3->4 G = [0, 3, 1, 4] 輸出:2 解釋: 連結串列中,0 和 1 是相連線的,3 和 4 是相連線的,所以 [0, 1] 和 [3, 4] 是兩個元件,故返回 2。
一、解題思路
用指標p表示當前連結串列結點,p一開始為head頭結點,我們從G中挨個遍歷,如果能找到,說明p的val在G中存在,這時,把p後移一個,即p=p->next,再在G(從G[0]到G[n-1])中找p的值,如果找到,同樣進香行操作,直到在中找不到p->val為止。此時,元件的個數加1。
二、leetcode程式碼
class Solution { public: int numComponents(ListNode* head, vector<int>& G) { if(!head||G.empty()) return 0; int num=0;//記錄元件個數 ListNode* p=head; while(p){ int t=0; for(int i=0;i<G.size();i++){ if(G[i]==p->val) {//G中找到了p->val p=p->next;//p後移一個 i=-1;//G從頭開始找p->val的值 t++;//記錄一個元件的長度 if(!p) break; } } if(t) {num++;}//continue;}//元件長度不為0,元件個數加1 if(!p) break; p=p->next; } return num; } };