doc: 2025-10-24打卡
This commit is contained in:
51
19.remove-nth-node-from-end-of-list.java
Normal file
51
19.remove-nth-node-from-end-of-list.java
Normal file
@@ -0,0 +1,51 @@
|
||||
/*
|
||||
* @lc app=leetcode id=19 lang=java
|
||||
*
|
||||
* [19] Remove Nth Node From End of List
|
||||
*/
|
||||
|
||||
// @lc code=start
|
||||
/**
|
||||
* 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 {
|
||||
/**
|
||||
* 在删除链表的倒数第n个node时,如果想在一次遍历中删除,可以使用两个指针:slow, fast
|
||||
* 其中,fast指针领先slow指针n个位置,之后fast指针和slow指针以相同的pace向后移动
|
||||
* 当fast到达链表尾部时,slow则是倒数第n个位置
|
||||
* 可以通过prev记录slow的前一个位置,然后删除prev节点
|
||||
*
|
||||
* @param head
|
||||
* @param n
|
||||
* @return
|
||||
*/
|
||||
public ListNode removeNthFromEnd(ListNode head, int n) {
|
||||
if(head == null) {
|
||||
return null;
|
||||
}
|
||||
ListNode prev = null, slow = head, fast = head;
|
||||
for(int i = 0; i < n; i++) {
|
||||
fast = fast.next;
|
||||
}
|
||||
while(fast != null) {
|
||||
fast = fast.next;
|
||||
prev = slow;
|
||||
slow = slow.next;
|
||||
}
|
||||
if(prev == null) {
|
||||
head = head.next;
|
||||
} else {
|
||||
prev.next = slow.next;
|
||||
}
|
||||
return head;
|
||||
}
|
||||
}
|
||||
// @lc code=end
|
||||
|
||||
Reference in New Issue
Block a user