LeetCode - 19.リストの最後からn番目のノードを削除

 

問題やアイデアの意味

質問の意味:少し(あなただけのカレンダーをできれば質問の注意:?意味は、削除するノードを見つけ、何度も尋ねました)

アイデア:愚かな方法の始まり@は、コメントのトピックを参照してくださいませんでした。ヘッド反転単鎖補間付き。非常に愚かな方法で、詳細はコード1を参照してください。@の後に適切な指導、ダブルポインタ法を用いた方法を得ます。アイデアは、おおよそ次のとおりです。

 

コード1

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode top = new ListNode(Integer.MIN_VALUE);
        top.next = head;
        ListNode p = top;
        if(n==1){
            while(p.next.next!=null) p = p.next;
            p.next = null;
            return top.next;
        }
        top = reverseList(head);
        p = top.next;
        int id = 0;
        while(p!=null){
            if(++id==n-1){
                if(p.next!=null) p.next = p.next.next;
                else p.next = null;
            }
            p = p.next;
        }
        return reverseList(top.next).next;
    }
    
    private ListNode reverseList(ListNode head){
        ListNode top = new ListNode(Integer.MIN_VALUE);
        top.next = null;
        ListNode t,p=head;
        while((t=p)!=null){
            p = p.next;
            t.next = top.next;
            top.next = t;
        }
        return top;
    }
}

 

代码2

おすすめ

転載: www.cnblogs.com/kyrie211/p/11225120.html