给你一个链表,删除链表的倒数第 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.经过分析得出这道题可以使用双指针来进行解题,而首先为了避免我们删除了链表的头节点,所以我们先要设定哨兵节点。
2.然后我们的左右双指针同时指向哨兵节点,一开始我们用循环让右指针先走n
步。
3.接着我们开始第二次循环直到右指针移到链表尾部,移动过程中左右双指针同时开始移动。
4.最后我们需要将左指针的指向下下个节点,跳过一个节点即可。
/*** 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) {ListNode ans = new ListNode(0, head);ListNode left = ans;ListNode right = ans;while (n-- > 0) {right = right.next;}while (right.next != null) {left = left.next;right = right.next;}left.next = left.next.next;return ans.next;}
}