leetcode 19 Remove Nth Node from end of list

題目要求:去掉linked list的倒數第n個節點

list:1->2->3->4->5 ,n=2,在去掉倒數第二個節點之後,變爲1->2->3->5 。(n永遠合法,且list最多過一趟)。

tags:linked list,two pointers ,fast&slow pointers

思路:

1.linked list一般設計一個僞頭(preHead),讓preHead指向真正的head,這樣給出的真正的head可以像list中的其他元素一樣進行判斷,減少了對頭元素狀態的判斷。

2.在這道題目裏,由於要求在一趟就去掉距離尾部距離爲n的節點,所以比較適合使用快慢指針,當快指針指向隊尾的時候,慢指針指向距離隊尾距離爲n的節點,去掉該節點即可。

//其實剛開始可以將fast.next和slow.next都指向head
	//再將fast指針和slow指針距離擴大到n
	//當fast.next指向空的時候(達到隊尾),slow達到了倒數第n+1個節點
    public ListNode removeNthFromEnd(ListNode head, int n) {
    	ListNode fast = new ListNode(0);
        ListNode slow = new ListNode(0);
        fast.next = slow;
        slow.next = head;
        for(int i=0;i<n;i++){
            head = head.next;
        }
        while(head!=null){
            head = head.next;
            slow = slow.next;
        }
        slow.next = slow.next.next;
        return fast.next.next;
    }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章