快慢指针

删除链表的倒数第n个节点

http://www.nowcoder.com/questionTerminal/f95dcdafbde44b22a6d741baf71653f6

删除倒数第n个节点,就是删除正数第m-n+1个节点,所以可以定义一个快指针,让它先走n步,快指针距离链表尾部还有m-n步,然后慢指针开始移动,当快指针移动到最后一个节点的时候,慢指针走走到了第m-n个节点,然后直接删除即可

    public ListNode removeNthFromEnd (ListNode head, int n) {
        // write code here
                if (head == null){
            return null;
        }

        ListNode node = new ListNode(-1);

        node.next = head;

        ListNode p = node;
        ListNode q = node;


        while (q.next != null){

            while (n-- > 0){
                q = q.next;
            }
            if (q.next == null){
                break;
            }
            p = p.next;
            q = q.next;
        }

        p.next = p.next.next;

        return node.next;
    }
全部评论

相关推荐

TP-LINK 前端工程师 年包大概20出头 本科
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务