19. Remove Nth Node From End of List

Given a linked list, remove the nth node from the end of list and return its head.

For example,

Given linked list: 1->2->3->4->5, and n = 2.

After removing the second node from the end, the linked list becomes 1->2->3->5.
Note:
Given n will always be valid.
Try to do this in one pass.

翻译 :删除掉单链表倒数第N个元素,N总是有效的 ,一次遍历。
Trick 在于使用两个指针,一个P1指向开头,另一个P2指向第N个结点,二者同时向后遍历,当P2达到TAIL时,P1也就到达了指定的结点。

PS:本来想不适用pre来保存前一个节点,单纯的使用delete O(1)的方法来写删除的,但是这种方法只适用于所删除的结点后面结点非空的情况。折腾了一番,还是乖乖写了pre结点。
http://www.jianshu.com/p/23e2affa80c5

class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode dummy = new ListNode (0);
        dummy.next = head ;
        ListNode pos = dummy;
        ListNode pre = dummy;
        int count = n ;
        while(count>0)
        {
            pos=pos.next;
            count--;
        }
        // 追踪到tail ,此时head 指向的是倒数第N个结点。
        while(pos.next!=null)
        {
            head=head.next;
            pos=pos.next;
            pre=pre.next;
        }

             pre.next=head.next;

        return dummy.next;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容