給你一個鏈表,刪除鏈表的倒數第 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;}
}