データ構造の削除チェーン表に含まれるすべてのノード

5197 ワード

方法1:チェーンの各ノードを巡回して、ノードの値を判断し、valであれば、節点の問題を削除する:ノードを削除するには、このノードの前駆ノードが必要で、先頭ノードは前駆体がなく、特殊な処理が必要である.
Node removeAll(Node head,int value){
        if (head == null){
            return null;
        }
        Node prev = head;
        Node cur = head.next;

        while(cur!=null){
            if (cur.value == value){
                prev.next = cur.next;//    
            }else {
                prev = cur;
            }
            cur = cur.next;
        }
        if (head.value == value){
            return head.next;//         
        }else
            return head;
    }
方法2:チェーンを巡回して、各ノードの値とvalueを比較して、同じではないなら、このノードを新しいチェーンブロック(最後の挿入)に移動します.
Node removeAll2(Node head,int value){
        Node newHead = new Node();
        Node newLast = newHead;
        
        Node cur = head;

        while(cur != null){
            //cur            
            if (cur.value != value){
                //       
                newLast.next = cur;
                newLast = cur;
            }
            cur = cur.next;
        }
        newLast.next = null;
        //       
        return newHead.next;
    }