Leetcode - 19. Remove Nth Node from end of List
2016-05-10 16:36
597 查看
问题简介
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.
解法一
/** * 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) { int length = 0; ListNode* hd = head; ListNode* newHead = head; // 考虑1个元素 eg:[1] 1 if(head->next==NULL)return NULL; while(head){ head = head->next; length++; } // 考虑除去第一个元素 if(n==length) { hd=hd->next; return hd; } // 考虑去除中间元素 n = length-n; for(int i=0;i<n-1;i++){ hd = hd->next; } hd->next = hd->next->next; return newHead; } };
解法二
引入newHead(-1)是为了保证在删除首元素时避免循环的first->next不存在。eg: N为原链表长度时,first遍历后first == NULL由于开头加了一个元素,first指针在遍历N步后
引入second指针随着first的遍历完全,指向被删除元素的前一个位置。
最后,second->next = second->next->next;
class Solution { public: ListNode* removeNthFromEnd(ListNode* head, int n) { ListNode* newHead = new ListNode(-1); newHead->next = head; ListNode*first = newHead; ListNode*second = newHead; for(int i=0;i<n;i++){ first = first->next; } while(first->next){ first = first->next; second = second->next; } ListNode* tmp = second->next; second->next = second->next->next; delete tmp; return newHead->next; }
相关文章推荐
- nodemailer发送邮件遇到的一些问题
- leetcode 19. Remove Nth Node From End of List
- 删除 Nodejs的方法,记录一下
- node短信接口开发
- hadoop datanode重启出现namenode的clusterID和datanode的不一致。
- ReactNative NodeJs v5.7.0稳定版官方下载
- node.js常用方法
- Nodejs 与MySQL交互(felixge/node-mysql)
- 求教——使用node做表单,刷新浏览器页面,浏览器为什么会重复提交上次所填的信息
- leetcode_swap node in pairs
- nodejs 调试 node-inspector包
- 使用Java程序来获得某个集群的NameNode或DataNode的相关信息
- DOM中的node与element的区别
- nodejs的 new String
- Web开发者之路(二):开始用NodeJS
- 在nodeJs的Express框架下用TypeScript编写router路由出现import关键字错误的解决方案
- Node.js 创建第一个应用(2)
- Node.js 安装配置(1)
- 从零开始nodejs系列文章
- 面试之路(28)-反转链表(reverse ListNode)