删除链表的倒数第N个节点----java
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
示例 1:
输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]
示例 2:
输入:head = [1], n = 1
输出:[]
示例 3:
输入:head = [1,2], n = 1
输出:[1]
作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xn2925/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
int len = 0; //链表长度
ListNode headlen = head; //同一个链表,用来操作长度
ListNode pre = head; //同一个链表,删除节点
while(headlen != null){ //当下一节点不为空,长度++
len++;
headlen = headlen.next; //一个节点接着一个节点
}
if (len - n == 0){ //当长度减去删除的倒数节点为0,直接返回此节点下一节点
return head.next;
}
for(int i=0;i<len-n-1;i++){ //遍历下一节点,找到删除节点的上一节点
pre = pre.next;
}
pre.next = pre.next.next; //删除节点
return head; //返回链表
}
}