题目描述
给你一个链表,删除链表的倒数第 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]
实现思路
1.遍历链表,计算链表长度size;
2.倒数第n个节点是正数第(size - n + 1)个节点;
3.使该节点的前一个节点的next指向该节点的下一个节点;
4.完成删除倒数第n个节点的操作。
实现代码
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode p = head;
int size = 0;
while(p != null){
p = p.next;
size++;
}
if(size == n){
head = head.next;
return head;
}
p = head;
int m = size - n;
for(int i = 1; i < m && p != null; i++){
p = p.next;
}
ListNode cons = p.next;
if(cons != null){
p.next = cons.next;
}else{
p.next = null;
}
return head;
}