[Leetcode 19, Easy] Remove Nth Node From End of List
2013-11-12 02:25
441 查看
Problem:
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.
Analysis:
本题的解法在于使用两个指针。前方的指针比后面的指针要前进n个元素。同时移动两个指针,知道前面的指针为空。然后删掉后面指针指向的元素。
时间复杂性:O(1) 空间复杂性:O(n)
类型:数据结构,操作题
衍生题:在指定位置插入一个元素(在中间插入元素可以使用不同速度指针的技巧)。
Solutions:
C++:
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.
Analysis:
本题的解法在于使用两个指针。前方的指针比后面的指针要前进n个元素。同时移动两个指针,知道前面的指针为空。然后删掉后面指针指向的元素。
时间复杂性:O(1) 空间复杂性:O(n)
类型:数据结构,操作题
衍生题:在指定位置插入一个元素(在中间插入元素可以使用不同速度指针的技巧)。
Solutions:
C++:
ListNode *removeNthFromEnd(ListNode *head, int n) { if(head==NULL) return head; if(head->next==NULL){ head=NULL; return head; } ListNode *pFront=head, *pBack=head; for(int i=0; i<n; ++i){ pFront=pFront->next; } if(pFront==NULL) head=head->next; else{ while(pFront->next!=NULL){ pFront=pFront->next; pBack=pBack->next; } pBack->next=pBack->next->next; } return head; }
相关文章推荐
- 使用node-inspector在线调试Node.js
- Getting Started with Node.js on Heroku
- LeetCode 之 Populating Next Right Pointers in Each Node
- PostgreSQL 源码解读 node的模拟实现
- Reverse Nodes in k-Group
- Hadoop namenode不能启动
- node.js
- 使用ESXI作为OpenStack compute node
- 关于Hadoop伪分布式每次启动都要format namenode
- [LeetCode] Swap Nodes in Pairs
- Swap Nodes in Pairs
- java学习脚印:xml中空白文本结点(whitespace TextNode)处理及验证方法
- [LeetCode]Remove Nth Node From End of List
- Node.js 入门
- HDFS(第一部分)
- LeetCode题解:Remove Nth Node from End of List
- 开心菜鸟学习系列学习笔记------------nodejs util公共函数
- 开心学习系列学习笔记-----nodejs缺点
- node-webkit解析excel文档
- C#操作XML文档(XmlDocument、XmlNode、XmlAttribute、SelectSingleNode、SelectNodes、XmlNodeList)