给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点

class Solution {
/**
快慢指针法:
让快指针先走N步,然后慢指针才开始走
直到快走完全程 此时慢指针的位置应该走到倒数第N个结点的前一个结点
*/
public ListNode removeNthFromEnd(ListNode head, int n) {
//0.处理边界问题
if(head==null) return null;
//1.定义需要的数据结构
ListNode fast = head;
ListNode slow = head;
for(int i = 0;i < n;i++) {
fast = fast.next;
}
//2.要移除的是首结点,可能情况有:链表有N个结点,删除倒数第N个
if(fast==null) return head.next;
//3.来到这里说明要删除的不是首结点,那就循环找到N的位置
while(fast.next != null) {
fast = fast.next;
slow = slow.next;
}
//4.删除second的下一个结点
slow.next = slow.next.next;
return head;
}
}
网友评论