2017-06-24 1 views
0
struct ListNode { 
    int val; 
    ListNode *next; 
    ListNode(int x) : val(x), next(NULL) {} 
}; 

class Solution { 
public: 
    bool hasCycle(ListNode *head) { 
     if(head == NULL) return false; 
     ListNode* walker = head; 
     ListNode* runner = head; 
     while(runner->next != NULL && walker->next != NULL){ 
      walker = walker->next; 
      runner = runner->next->next; 
      if(walker == runner) return true; 
     } 
     return false; 
    } 
}; 

私はかなりシンプルなインタビューコードを練習していました。単一リンクリストにサイクルがあるかどうかを判断するブールを返す必要があります。私は1ステップ移動する2つのポインタウォーカーと2つのステップを繰り返し実行するランナーを作った。'struct ListNode'型のヌルポインタ内のメンバアクセス

しかし、その後、このコードは私にエラーを与えた:

Line 15: member access within null pointer of type 'struct ListNode' 

そのエラーの原因は何?

+0

このコードを実行する静的コード解析ツールはありますか? –

+1

各ステップを2ステップずつ動かすのは危険ですか?リストに偶数の要素があることをどのように知っていますか? – DeiDei

+0

デバッガの使い方を学ぶことをお勧めします。 – juanchopanza

答えて

0

は、あなただけのヌルになることができますが割り当て

runner = runner->next->next;

runner後、runner->nextがnullでないことを確認してください。

+0

「walker」と同じです。 – juanchopanza

+0

@juanchopanza 'walker'と同じではありませんが、' walker-> next'はnullがチェックされています。 – VTT

+0

ええ、良い点。私の間違い。 – juanchopanza

関連する問題