LeetCode 第18题 删除链表的倒数第N个节点

/*19. 删除链表的倒数第N个节点

给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。

示例:

给定一个链表: 1->2->3->4->5, 和 n = 2.

当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:

给定的 n 保证是有效的。 */

/*  Definition for singly-linked list.  public class ListNode{  int val; ListNode next;  ListNode(int x) { val = x; }  } */

/*思路:双指针法.  参考官方题解 : https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/solution/*/
 1 class ListNode17 {
 2
 3   int val;
 4   ListNode17 next;
 5
 6   ListNode17(int x) {
 7     val = x;
 8   }
 9 }
10
11
12 class Solution19 {
13
14   public ListNode removeNthFromEnd(ListNode head, int n) {
15     if (head == null || n < 1) {
16       return null;
17     }
18     ListNode dummy = new ListNode(0);
19     ListNode high = dummy;
20     ListNode low = dummy;
21     dummy.next = head;
22     for (int i = 0; i < n && high != null; i++) {
23       high = high.next;
24     }
25     if (high == null) {
26       return null;
27     }
28     while (high.next != null) {
29       low = low.next;
30       high = high.next;
31     }
32     low.next = low.next.next;
33     return dummy.next;
34   }
35 }

原文地址:https://www.cnblogs.com/rainbow-/p/10295744.html

时间: 2024-11-05 18:44:53

LeetCode 第18题 删除链表的倒数第N个节点的相关文章

lintcode 容易题:Remove Nth Node From End of Lis 删除链表中倒数第n个节点

题目: 删除链表中倒数第n个节点 给定一个链表,删除链表中倒数第n个节点,返回链表的头节点.  样例 给出链表1->2->3->4->5->null和 n = 2. 删除倒数第二个节点之后,这个链表将变成1->2->3->5->null. 注意 链表中的节点个数大于等于n 解题: 要删除倒数第n个节点,我们要找到其前面一个节点,也就是倒数第n+1的节点,找到这个节点就可以进行删除.和上题的思想很类似, 定义两个指针,p和cur,cur指针向前走,走了n

LeetCode 19. 删除链表的倒数第N个节点(Remove Nth Node From End Of List)

题目描述 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5. 说明: 给定的 n 保证是有效的. 进阶: 你能尝试使用一趟扫描实现吗? 解题思路 典型的利用双指针法解题.首先让指针first指向头节点,然后让其向后移动n步,接着让指针sec指向头结点,并和first一起向后移动.当first的next指针为NULL时,

leetcode 19: 删除链表的倒数第N个节点

题目:  给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5. 1 ListNode* removeNthFromEnd(ListNode* head, int n) { 2 ListNode *p = head, *q = head; 3 while(n-- > 0 && nullptr != p

领扣(LeetCode)删除链表的倒数第N个节点 个人题解

给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5. 说明: 给定的 n 保证是有效的. 进阶: 你能尝试使用一趟扫描实现吗? 快慢针的思想.快针先移动N个步长,然后两个针一起移动,快针结束时,慢针指向倒数第N+1个节点.然后就是简单的删除节点操作了.这里需要注意删除的节点是第一个节点的特判. 这里由于使用了JAVA,对

LeetCode(19):删除链表的倒数第N个节点

Medium! 题目描述: 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5. 说明: 给定的 n 保证是有效的. 进阶: 你能尝试使用一趟扫描实现吗? 解题思路: 这道题让我们移除链表倒数第N个节点,限定n一定是有效的,即n不会大于链表中的元素总数.还有题目要求我们一次遍历解决问题,那么就得想些比较巧妙的方法了.比如

LeetCode 19——删除链表的倒数第 N 个节点

1. 题目 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5. 说明: 给定的 n 保证是有效的. 进阶: 你能尝试使用一趟扫描实现吗? 2. 思路 定义两个指针 p1.p2,刚开始两个指针都指向头结点.如果要删除倒数第 N 个结点,我们就让 p2 先前进 N-1 步,这时候 p2 后面的节点个数为 K,那我们要删除的

[LeetCode] 19. 删除链表的倒数第N个节点 ☆☆☆

描述 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5.说明: 给定的 n 保证是有效的. 进阶: 你能尝试使用一趟扫描实现吗? 解析 用三指针,fast比slow快n个位置,slowPre是slow的pre节点. 代码 public static ListNode removeNthFromEnd(ListNode

leetcode(10)-删除链表的倒数第N个节点

给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 链接 https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/ 凑数吧 class Solution: def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode: lists = [] arrow = head while arrow: lists.append(arrow) arrow

LeetCode 19. Remove Nth Node From End of List(删除链表中倒数第N个节点)

题意:删除链表中倒数第N个节点. 法一:递归.每次统计当前链表长度,如果等于N,则return head -> next,即删除倒数第N个节点:否则的话,问题转化为子问题“对head->next这个链表删除倒数第N个节点”,将head的next指针指向该子问题的结果,返回head即可.这个方法时间复杂度高,不推荐. /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next;