题目地址:https://oj.leetcode.com/problems/remove-nth-node-from-end-of-list/
方法:利用快慢指针,首先快指针比慢指针快n个节点,然后快慢指针同时往后走,快指针走到NULL时,慢指针的位置就是需要删除的节点位置。
遇到链表题目的一个技巧,利用dummy节点,令dummy.next=head 最后返回dummy.next,这样就可以在删除节点的时候方便考虑,每个节点都有前置节点,当删除头节点的时候无需特殊考虑(无需保持住头结点)
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
if(head==null)return null;
ListNode dummy=new ListNode(0);
ListNode fast = head;
ListNode low = head;
ListNode pre = dummy;
dummy.next=head;
while((n--)>0){
fast=fast.next;
}
while(fast!=null){
fast=fast.next;
pre = low;
low=low.next;
}
pre.next=low.next;
return dummy.next;
}
}

本文介绍了一种使用快慢指针的方法来解决LeetCode上的链表题目——删除倒数第N个节点的问题。通过设置一个虚拟头节点(dummy node),可以简化边界条件的处理,使得代码更简洁易懂。
296

被折叠的 条评论
为什么被折叠?



