本文主要是介绍【Hot100】LeetCode—19. 删除链表的倒数第 N 个结点,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
- 1- 思路
- 双指针
- 2- 实现
- ⭐19. 删除链表的倒数第 N 个结点——题解思路
- 3- ACM 实现
- 原题连接:19. 删除链表的倒数第 N 个结点
1- 思路
双指针
- 定义
dummyHead
处理头结点情况 slow
指针:初始化为dummyHead
定位到被移除元素的前一个fast
指针:初始化诶dummyHead
,从dummyHead
开始 先移动n
位- 之后 同时移动
slow
和fast
,终止条件是while(fast.next!=null)
2- 实现
⭐19. 删除链表的倒数第 N 个结点——题解思路
class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {// 双指针// 定义 dummyListNode dummyHead = new ListNode(-1);dummyHead.next = head;ListNode slow = dummyHead;ListNode fast = dummyHead;for(int i = 0 ; i < n;i++){fast = fast.next;}while(fast.next!=null){slow = slow.next;fast = fast.next;}// slow 定位到前slow.next = slow.next.next;return dummyHead.next;}
}
3- ACM 实现
public class removeN {public static class ListNode {int val;ListNode next;ListNode(int x) {val = x;next = null;}}public static ListNode removeNthFromEnd(ListNode head, int n) {// 双指针// 定义 dummyListNode dummyHead = new ListNode(-1);dummyHead.next = head;ListNode slow = dummyHead;ListNode fast = dummyHead;for(int i = 0 ; i < n;i++){fast = fast.next;}while(fast.next!=null){slow = slow.next;fast = fast.next;}// slow 定位到前slow.next = slow.next.next;return dummyHead.next;}public static void main(String[] args) {Scanner sc = new Scanner(System.in);
// 读取第一个链表的节点数量int n1 = sc.nextInt();ListNode head1 = null, tail1 = null;for (int i = 0; i < n1; i++) {int val = sc.nextInt();ListNode newNode = new ListNode(val);if (head1 == null) {head1 = newNode;tail1 = newNode;} else {tail1.next = newNode;tail1 = newNode;}}System.out.println("输入n");int nth = sc.nextInt();ListNode forRes = removeNthFromEnd(head1,nth);while(forRes!=null){System.out.print(forRes.val+"");forRes = forRes.next;}}
}
这篇关于【Hot100】LeetCode—19. 删除链表的倒数第 N 个结点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!