LeetCode-Problem 19:删除链表的倒数第N个节点

题目

给定一个链表,删除链表的倒数第 n 个节点并返回头结点。例如:

给定一个链表: 1->2->3->4->5, 并且 n = 2.

当删除了倒数第二个节点后链表变成了 1->2->3->5.

说明:

  • 给的 n 始终是有效的。
  • 尝试一次遍历实现。

算法思想

两个指针first,second,第一个指针首先步进n步,之后,两个指针一起步进,当第一个指针first到达链表尾部时,第二个指针指向的即为链表中的倒数第n个节点

算法实现

public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode first;
        ListNode second;
        ListNode pre;
        first = head;
        second = head;
        pre = second;
        int index = 0;
        while (index < n) {
            first = first.next;
            index++;
        }
        while (first != null) {
            pre = second;
            second = second.next;
            first = first.next;
            index++;
        }
        //删除节点
        pre.next = second.next;
        //只有一个节点
        if (index == 1) {
            return null;
        } else if (head == second) {
            //删除的是头节点
            return head.next;
        } else {
            //删除的是非头节点
            return head;
        }
    }
点赞