LeetCode-19 删除链表的倒数第N个节点(一遍扫描)
2019-07-24 18:31
295 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_43622230/article/details/97149359
LeetCode-19 删除链表的倒数第N个节点(一遍扫描)
题目链接:LeetCode-19
题目大意:移除倒数第n个节点
解题思路:首先就是两遍扫描 第一遍扫描出链表的长度 将倒数第n个节点转化为正数第n个节点 第二遍扫描进行删除
重点的进阶部分为 一趟扫描完成
我的实现思路是运用三个节点 一个前驱(second) 一个后驱(first) 一个后驱的前一个状态(rec)
和储存链表长度的size还有当前前驱的坐标值
一遍扫描 首先扫描的前提是前驱的下一个节点不能为空 扫描过程中 如果前驱的坐标值不等于n就让前驱向后移动一位 坐标加一 如果坐标值等于n 那么就让前后驱都向后移动一位(这里注意保存后驱移动前的节点 也就是rec要指向的节点)最后循环终止时 你会发现现在的前驱刚好落在要删除的节点上 那么要操作的节点就是记录前驱历史的rec (最后打个补丁 如果根据size发现删除的是头节点 直接操作head 不然会Wa)
看着挺花里胡哨的(其实是我表述不清) 找个长一点的例子试一下就明白了
代码块:
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { // 第一种实现方式 扫描两遍 第一遍扫描出链表长度 第二遍根据正序位置解决问题 // 第二种实现方式 一趟扫描 ListNode first = head; ListNode second = head; ListNode rec = head; int size = 1; int index = 1; // 通过这个循环就可以让first指向要删除的节点 rec执行要改next的节点 while(second.next != null){ if(index == n){ rec = first; second = second.next; first = first.next; }else{ second = second.next; index++; } size++; } if(n == size){ head = head.next; }else if(rec.next != null){ rec.next = rec.next.next; } return head; } }
相关文章推荐
- LeetCode 19: 删除链表的倒数第N个节点 C++实现
- [LeetCode-19] Remove Nth Node From End of List(删除链表中倒数第N个节点)
- leetcode 19 删除链表的倒数第N个节点(快慢指针)
- LeetCode 19. 删除链表的倒数第N个节点
- LeetCODE 19 删除链表的倒数第N个节点
- leetcode 19: 删除链表的倒数第N个节点
- leetcode19删除链表的倒数第N个节点(C语言版)
- [LeetCode] 19. Remove Nth Node From End of List 删除链表的倒数第N个节点 @python
- leetcode-19. Remove Nth Node From End of List(删除链表倒数第N个节点)
- Leetcode 19 删除链表的倒数第N个节点【链表】
- leetcode 19、删除链表的倒数第n个节点(双指针)
- LeetCode(Java版)19. 删除链表的倒数第N个节点
- leetcode19 Remove Nth Node From End of List(删除链表的倒数第N个节点)
- LeetCode-19-删除链表的倒数第n个节点
- C++ LeetCode 19 删除链表的倒数第N个节点
- LeetCode题解(python)-19. 删除链表的倒数第N个节点
- 【Leetcode】19. 删除链表的倒数第N个节点
- LeetCode-19删除链表的倒数第n个节点
- [C++]LeetCode 19: Remove Nth Node From End of List(删除链表中倒数第n个节点)
- 【LeetCode题解】19_删除链表的倒数第N个节点(Remove-Nth-Node-From-End-of-List)