实现删除链表倒数第N个节点的功能

根据LeetCode19题的要求,实现了删除链表倒数第N个节点的功能。通过两个指针分别定位到第N个节点和链表头,当第一个指针移动到链表末尾时,第二个指针将跳过需要删除的节点,从而实现删除操作。提供了两个实现版本,分别在类Solution和类So中。
This commit is contained in:
whaifree 2024-08-09 23:49:02 +08:00
parent 3aaee55251
commit f6d0c4fc63

View File

@ -0,0 +1,56 @@
package cn.whaifree.redo.redo_all_240721;
import cn.whaifree.leetCode.model.ListNode;
import org.junit.Test;
/**
* @version 1.0
* @Author whai文海
* @Date 2024/8/9 21:20
* @注释
*/
public class LeetCode19 {
@Test
public void test() {
// new Solution().removeNthFromEnd(ListNode.listNodeFromArray(new int[]{1, 2, 3, 4, 5}), 2).printList();
new So().ListNoderemoveNthEromEnd(ListNode.listNodeFromArray(new int[]{1}), 1).printList();
}
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode pre = new ListNode(-1, head);
ListNode fast = pre;
ListNode slow = pre;
for (int i = 0; i < n; i++) {
fast = fast.next;
}
while (fast.next != null) {
fast = fast.next;
slow = slow.next;
}
slow.next = slow.next.next;
return pre.next;
}
}
class So {
public ListNode ListNoderemoveNthEromEnd(ListNode head, int n) {
ListNode first = new ListNode(0, head);
ListNode second = head;
for (int i = 0; i < n; i++) {
second = second.next;
}
while (second != null) {
first = first.next;
second = second.next;
}
first.next = first.next.next;
return head;
}
}
}