19. Remove Nth Node From End of List

来源:互联网 发布:58网络公关公司 编辑:程序博客网 时间:2024/06/10 11:21

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就知道要删除正着数第几个元素,结果题目要求one pass。那就只能用两个指针,一个快指针先走n步,一个慢指针从头开始走,这样当快指针走到尾部的时候,慢指针所指的就是要删除元素的前一个元素。

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; } * } */public class Solution {    public ListNode removeNthFromEnd(ListNode head, int n) {        if(head == null) {            return null;        }        ListNode p = head;        ListNode q = head;        for(int i=0;i<n;i++) {            q = q.next;        }        if(q == null) {            head = head.next;            return head;        }        while(q.next != null) {            p = p.next;            q = q.next;        }        p.next = p.next.next;        return head;    }}
原创粉丝点击