删除链表的倒数第n个节点
2023-09-11 14:19:17 时间
采用两个指针,对前指针,使其先走出N步,随后两个指针同时前进,当前指针到达链表尾部时,后指针到达倒数第N个节点的位置。
注意:删除时注意待删除节点为头结点时的情况。
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
class Solution {
public:
/**
*
* @param head ListNode类
* @param n int整型
* @return ListNode类
*/
ListNode* removeNthFromEnd(ListNode* head, int n) {
// write code here
ListNode* newhead = new ListNode(0); //必须定义新的空头
newhead->next = head; //新空头->next = head
head = newhead; //head = newhead 这句不懂
ListNode *fast = head;
ListNode *slow = head;
if (head == NULL)
{
return head;
}
for (int i = 0; i < n; i++)
{
fast = fast->next;
}
while (fast->next != NULL)
{
fast = fast->next;
slow = slow->next;
}
ListNode *node = slow->next; //删除节点的三句话 (1)定义节点=下一个
slow->next = slow->next->next; // (2)下一个=下一个的下一个
free(node); // (3)释放定义的节点
return newhead->next; // 这句很重要。我试了如head、newhead都不对
}
};
相关文章
- 【算法】【链表模块】使用单链表进行选择排序
- 【算法】【链表模块】单链表删除重复节点
- 【算法】【链表模块】判断单链表是否是回文串
- 数组与链表(暂时只有单链表)
- 链表中倒数第k个节点
- 【Leetcode】2095. 删除链表的中间节点(中等)
- [算法]删除链表中重复的节点
- 删除链表倒数第N个节点
- 【数据结构】链表
- [LeetCode]剑指 Offer 22. 链表中倒数第k个节点
- 剑指offer解法汇总76-删除链表中重复的结点
- LeetCode 237. 删除链表中的节点
- 「Java 数据结构」:环形链表和约瑟夫问题。
- 数据结构 | 单链表SingleList【带你从浅入深真正搞懂链表】
- 12、代码的鲁棒性——反转链表(python版)
- 16、链表——链表中环的入口节点(python版)
- 【链表OJ题(八)】相交链表
- 【leetcode】日积月累,每日一题--24. 两两交换链表中的节点(DayDayUp 14)
- 【刷题笔记】之牛客面试必刷TOP101(二叉树的前.中.后.层序遍历+按之字形顺序打印二叉树+二叉树的最大深度+二叉树中和为某一值的路径(一)+二叉搜索树与双向链表+判断是不是二叉搜索树)
- 【leetcode】23:合并k个生序链表
- [LeetCode] 1171. Remove Zero Sum Consecutive Nodes from Linked List 从链表中删去总和值为零的连续节点
- [LeetCode] Delete Node in a Linked List 删除链表的节点
- [LeetCode] 148. Sort List 链表排序
- 算法练习-第二天(合并两个排序的链表)