Leikou 19リンクリストの一番下からN番目のノードを削除します(ダミーノードを定義します)

1.タイトル

ここに画像の説明を挿入

2.私の最初の考えと問題

この質問は非常に思慮深く、リンクリストの長さを取得した後、ダミーノードを直接定義し、forループを使用して削除するノードの前のノードを取得してからtemp2.next = temp2.next.next;、削除を完了します。

3.問題解決方法1:ダミーノードを定義します。

class Solution {
    
    
    public ListNode removeNthFromEnd(ListNode head, int n) {
    
    
        ListNode temp = head;
        int length = 0;
        //定义一个虚拟节点
        ListNode virtus = new ListNode(0 ,head);
        ListNode temp2 = virtus;

        //遍历链表,获取链表长度
        while(temp != null){
    
    
            length++;
            temp = temp.next;
        }

        //获取被删除节点的前一个节点
        for(int i = 0;i< length - n;i++){
    
    
                temp2 = temp2.next;
            }
            temp2.next = temp2.next.next;

        return virtus.next;
    }
}

これは私が直接書いたコードです。注
(1)仮想ノードを定義するステートメント:ListNode virtus = new ListNode(0 ,head);valはint型であり、最初に「」を書くことに注意を払っていなかったため最初のパラメーターは0に設定されます。 。
(2)最後の戻り値virtus.nextに注意してください。戻り値はtemp2ではなく、temp2は元のリンクリスト内のノードを変更するための補助ノードとして使用され、仮想ノードvirtusは常に同じです。変更されたリンクリストを取得できます。
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/ambitionLlll/article/details/113925351