LeetCodeブラッシング質問のT19は、リンクリストの下部からN番目のノードを削除します(中)

今回のトピックは、LeetCodeのT19がリンクリスト(中)の下部からN番目のノードを削除することです。言うまでもなく、次のトピック:
ここに画像の説明を挿入
リンクリストノードの定義:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */

リンクリストのデータ構造を理解している限り、これは比較的単純な問題であり、解決策を考えることができます。
問題解決のアイデア:最初にリンクリストをトラバースしてリンクリストの長さを取得してから、リンクリストを変更するように設定します。以下に示すように
ここに画像の説明を挿入
、最後から2番目のノードを削除する場合は、インデックスがsum-n-1であるノードの次を変更する必要があることがわかります。
次に、node.next = node.next.next;とします。コードをダウン:

class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        //判空操作
        if(head==null||head.next==null)
        return null;
        //定义两个指针,point用来操作链表,gethead用来表示对头结点的引用
        ListNode point=head;
        ListNode gethead=head;
        int sum=0;//用来计算链表长度
        //计算长度
        while(head!=null){
            sum++;
            head=head.next;
        }

        int index=0; //计算当前遍历到第几个
 
        //排除特殊情况,当sum=n的时候!
        if(sum-n-1<0){
            return gethead.next;
        }
         
         //通过point指针对链表进行操作
        for(int i=0;i<sum;i++){
            if(index==sum-n-1){
                //修改next 达到删除的目的
                point.next=point.next.next;
                break;
            }
            index++;
            point=point.next;
        }
        return gethead;
    }
}

コードは上記のとおりですが、注意すべき点が2つあります。
1つ:空にする操作を実行することを忘れないでください。
2:sumとnの値が等しい場合、つまりリンクされたリストの長さで下からn番目を削除する場合、これら2つの値が等しい場合、sum-n-1は0未満になるため、次の変更操作は実行されないため、個別に説明する必要があります!
以上がこのトピックの説明です。何か問題がありましたら、ご指摘いただければ幸いです。

おすすめ

転載: blog.csdn.net/Pzzzz_wwy/article/details/105670943