题目描述:
给你一个链表,删除链表的倒数第 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]
方法:快慢指针一次遍历法
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode index1 = head, index2 = head;
for(int i = 0; i < n; i++){
index2 = index2.next; //使得index1与index2之间间隔n-1个节点
}
if(index2 == null)
return head.next; //说明删除的是头节点
while(index2.next != null){ //将index2移至最后一个节点
index2 = index2.next;
index1 = index1.next;
}
index1.next = index1.next.next;
return head;
}
}
题目来源:LeetCode