LeetCode 19. 删除链表的倒数第N个节点
2019-03-27 10:40
288 查看
题目描述
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
示例:
给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 1->2->3->5.
说明:
给定的 n 保证是有效的。
进阶:
你能尝试使用一趟扫描实现吗?
问题分析
首先判断头节点是否为空,如果为空则返回NULL,不为空再往后进行。由于删除倒数第n个节点,所以如果n等于链表的长度的话,那么把头节点向后移动n次,将恰好为NULL,这种情况下,删除的就是头节点,所以返回头节点的next节点即可;如果头节点向后移动n次后不为NULL,则说明要删除的不是头节点,这时del指向的是头节点,所以进入循环:如果cur->next不为空,就同时向后移动cur节点和del节点,当cur->next为空时跳出循环,此时del指向的是待删除节点的前一个节点,所以进行del->next = del->next->next;操作对节点进行删除,并返回头节点head。
代码实现
[code]/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* removeNthFromEnd(ListNode* head, int n) { if(head == NULL) return NULL; ListNode* del = head; ListNode* cur = head; for(int i = 0; i < n; i++) cur = cur->next; if(cur == NULL) return head->next; while(cur->next != NULL){ del = del->next; cur = cur->next; } del->next = del->next->next; return head; } };
相关文章推荐
- leetcode19--删除链表中倒数第n个节点
- leetcode19删除链表的倒数第N个节点(C语言版)
- [Leetcode] 19. 删除链表的倒数第N个节点 java
- [LeetCode-19] Remove Nth Node From End of List(删除链表中倒数第N个节点)
- leetcode-19. Remove Nth Node From End of List(删除链表倒数第N个节点)
- 【Leetcode】19. 删除链表的倒数第N个节点
- leetcode19 Remove Nth Node From End of List(删除链表的倒数第N个节点)
- Leetcode做题日记:19. 删除链表的倒数第N个节点(PYTHON)
- [LeetCode] 19. Remove Nth Node From End of List 删除链表的倒数第N个节点 @python
- [C++]LeetCode 19: Remove Nth Node From End of List(删除链表中倒数第n个节点)
- leetcode 19: 删除链表的倒数第N个节点
- LeetCode题解(python)-19. 删除链表的倒数第N个节点
- 【LeetCode题解】19_删除链表的倒数第N个节点(Remove-Nth-Node-From-End-of-List)
- 每天一道LeetCode-----删除链表倒数第n个节点
- leetcode-删除链表的倒数第N个节点
- leetcode 删除链表的倒数第N个节点
- leetcode_[python/C++]_19. Remove Nth Node From End of List(删除链表末第n个节点)
- LeetCode 从链表中删除倒数第N个节点
- LeetCode:删除链表的倒数第N个节点
- LeetCodet题解--19. Remove Nth Node From End of List(删除链表的倒数第n个元素)