【Leetcode】19. 删除链表的倒数第N个节点
2019-02-07 23:27
302 查看
算法耗时4ms,第一次超过100%哈哈哈哈哈✌
题目描述
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
示例:
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.
说明:
给定的 n 保证是有效的。
进阶:
你能尝试使用一趟扫描实现吗?
算法设计
题目中n保证是有效的,就不需要考虑n大于链表长度的情况,这样就可以省去求链表总长度的时间。算法步骤如下:
- 声明两个指针p,t,均指向链表头节点。
- 将t指针前移n个结点。
- p、t两个指针一起向后遍历链表,当t指针到达末尾时,p指针指向第n-1个结点,此时删除第n个结点即可。
注意: 要注意链表只有一个结点并且要删除该节点的情况。
C++代码
class Solution { public: ListNode* removeNthFromEnd(ListNode* head, int n) { ListNode *pre, *tail, *res; tail = head; pre = head; res = new ListNode(0); res->next = head; int cnt = n; while(tail != NULL){ cnt--; if(cnt < -1){ pre = pre->next; } tail = tail->next; } if(cnt == 0){ // 判断是否删除的是链表中唯一的结点 return head->next; } pre->next = pre->next->next; return res->next; } };
相关文章推荐
- leetcode19--删除链表中倒数第n个节点
- LeetCode题解(python)-19. 删除链表的倒数第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个节点)
- 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题解】19_删除链表的倒数第N个节点(Remove-Nth-Node-From-End-of-List)
- 每天一道LeetCode-----删除链表倒数第n个节点
- leetcode习题集——19. 删除链表的倒数第N个节点
- leetcode-删除链表的倒数第N个节点
- leetcode 删除链表的倒数第N个节点
- leetcode_[python/C++]_19. Remove Nth Node From End of List(删除链表末第n个节点)
- 19. 删除链表的倒数第N个节点
- LeetCode 从链表中删除倒数第N个节点
- LeetCode:删除链表的倒数第N个节点