LeetCode之“链表”:Remove Nth Node From End of List
2015-06-27 10:55
615 查看
题目链接
题目要求:
Given a linked list, remove the nth node from the end of list and return its head.
For example,
Note:
Given n will always be valid.
Try to do this in one pass.
这道题比较常规的想法是先算出链表长度len,再将头指针移动len-n步就可以到达待删节点了。具体程序如下(4ms):
另一个比较巧妙的方法就是先定义一个慢指针(初始值为头指针父指针),让头指针移动n步,再让头指针和一个慢指针同时移动直至头指针为空,这时慢指针指向的下一个节点就是待删节点。具体程序日如下(4ms):
题目要求:
Given a linked list, remove the nth node from the end of list and return its head.
For example,
Given linked list: 1->2->3->4->5, and n = 2. After removing the second node from the end, the linked list becomes 1->2->3->5.
Note:
Given n will always be valid.
Try to do this in one pass.
这道题比较常规的想法是先算出链表长度len,再将头指针移动len-n步就可以到达待删节点了。具体程序如下(4ms):
/** * 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) return head; int len = 0; ListNode *start = head; while(start) { len++; start = start->next; } if(len == n) { start = head; head = head->next; delete start; start = nullptr; return head; } ListNode *preNode = head; start = preNode->next; int k = 1; while(k < len - n) { preNode = start; start = start->next; k++; } preNode->next = start->next; delete start; start = nullptr; return head; } };
另一个比较巧妙的方法就是先定义一个慢指针(初始值为头指针父指针),让头指针移动n步,再让头指针和一个慢指针同时移动直至头指针为空,这时慢指针指向的下一个节点就是待删节点。具体程序日如下(4ms):
/** * 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) return head; ListNode *dummy = new(nothrow) ListNode(INT_MIN); assert(dummy); dummy->next = head; for(int i = 0; i < n; i++) head = head->next; ListNode *preNode = dummy; while(head) { head = head->next; preNode = preNode->next; } ListNode *delNode = preNode->next; preNode->next = delNode->next; delete delNode; delNode = nullptr; head = dummy->next; delete dummy; dummy = nullptr; return head; } };
相关文章推荐
- Count Complete Tree Nodes (求完全二叉树节点树)
- websocket连接失败
- Node TroubleShooting Tips
- 对于node.js开发指南中博客案例的修改实现(二)--代码
- Count Complete Tree Nodes算法详解
- leetcode-116-Populating Next Right Pointers in Each Node
- Node.js环境搭建
- Node.js程序在node-windows中不能运行
- node 安装socket.io
- nodejs npm常用命令
- Nodejs Request使用介绍
- ENode框架使用场景简述
- node mysql 连接池
- NodeJs Debug小工具的使用
- node.js 初体验
- webstorm配置node.js
- Leetcode#19 Remove Nth Node From End of List
- windows下nodejs环境配置
- [leetcode] Populating Next Right Pointers in Each Node II
- 《 Node.js项目实践:构建可扩展的Web应用》试读