力扣top100-19. 删除链表的倒数第 N 个结点-双指针
题目
链接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]
示例 2:
输入:head = [1], n = 1
输出:[]
示例 3:
输入:head = [1,2], n = 1
输出:[1]
准备:
题目其实很简单,但是要考虑很多边界条件,特例
所以重新写一个
算法选择-双指针
前面指针跟踪后面的,定位到倒数第n个位置
考虑:
1.链表null,
2.n值为0
3.n值大于链表长度
4.n等于链表长度
5.链表仅有一个节点且n=1(区别前面的不合法输入,这个输入合法但是结果特殊)
代码:
/**
* 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) {
//情况1:链表空
if(head==null)return null;
//情况5:链表长度为1.n==1
if(head.next==null&&n==1)return null;
//情况2:n为0
if(n==0)return head;
ListNode pre=head,p=head;
for(int i=0;i