给定一个链表,删除链表中倒数第n个节点,返回链表的头节点
一.目标:如上
二.思路:使用两个节点,让一个节点领先n+2,当开头的节点走到null 时,后一个节点走到了要删除的节点的前节点,此时可进行删除。
三.易错点:分不清到底领先多少步和判断 n 与链表的长度的关系
代码如下:
/** * Definition for ListNode. * public class ListNode { * int val; * ListNode next; * ListNode(int val) { * this.val = val; * this.next = null; * } * } */ public class Solution { /** * @param head: The first node of linked list. * @param n: An integer. * @return: The head of linked list. */ public ListNode removeNthFromEnd(ListNode head, int n) { if(n < 0){ return null; } ListNode dummy = new ListNode(0); dummy.next = head; ListNode preDelete = dummy; for(int i = 0; i < n; i++){ if(head == null){ return null; //必须 因为也许给的数值不符合链表情况 } head = head.next; } while(head != null){ head = head.next; preDelete = preDelete.next; } preDelete.next = preDelete.next.next; return dummy.next; } }