题解 | #删除链表的倒数第n个节点#
删除链表的倒数第n个节点
https://www.nowcoder.com/practice/f95dcdafbde44b22a6d741baf71653f6
public ListNode removeNthFromEnd (ListNode head, int n) { ListNode result = head; //参数校验 if(head == null) return null; //获取链表的长度 int listNodeLength = getListNodeLength(head); int index = listNodeLength -n + 1; if(index <= 0) return null; //特殊情况判断 if(index == 1){ return head.next; } int count = 1; ListNode preNode = null; while(index != count){ preNode = head; head = head.next; count ++; } //循环借宿,删除此时位置的节点 preNode.next = head.next; return result; } private int getListNodeLength(ListNode pHead) { //记录链表的个数 int count = 1; while(pHead.next != null){ pHead = pHead.next; count ++ ; } return count; }
解题思路:
1、常用的参数校验,判空,n超过链表长度
2、找到要删除的节点的位置,提前留一个变量记录删除节点位置的上一个位置
3、将要删除位置节点的上一个节点指向要删除节点的下一个节点即可