Remove Nth Node From End of List(easy)
2016-06-01 18:00
507 查看
【题目】
Given a linked list, remove the nth node from the end of list and return its head.
For example,
【题意】
删除链表的倒数第n个元素
【分析】
设置两个指针first跟second。first指针先移动n步,若此时first指针为空,则表示要删除的是头节点,此时直接返回head->next即可。如果first指针不为空,则将两个指针一起移动,直到first指针指向最后一个节点,令second->next=second->next->next即可删除第你n个节点。
【实现】
public ListNode removeNthFromEnd(ListNode head, int n) {
if(head == null)
return null;
ListNode fast = head;
ListNode slow = head;
for(int i=0; i<n; i++){
fast = fast.next;
}
//if remove the first node
if(fast == null){
head = head.next;
return head;
}
while(fast.next != null){
fast = fast.next;
slow = slow.next;
}
slow.next = slow.next.next;
return head;
}
c++ ListNode *removeNthFromEnd(ListNode *head, int n) {
if(head == NULL || head->next == NULL)
return NULL;
ListNode * first = head;
ListNode * second = head;
for(int i = 0;i < n;i++)
first = first->next;
if(first == NULL)
return head->next;
while(first->next != NULL)
{
first = first->next;
second = second->next;
}
second->next = second->next->next;
return head;
}
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.
【题意】
删除链表的倒数第n个元素
【分析】
设置两个指针first跟second。first指针先移动n步,若此时first指针为空,则表示要删除的是头节点,此时直接返回head->next即可。如果first指针不为空,则将两个指针一起移动,直到first指针指向最后一个节点,令second->next=second->next->next即可删除第你n个节点。
【实现】
public ListNode removeNthFromEnd(ListNode head, int n) {
if(head == null)
return null;
ListNode fast = head;
ListNode slow = head;
for(int i=0; i<n; i++){
fast = fast.next;
}
//if remove the first node
if(fast == null){
head = head.next;
return head;
}
while(fast.next != null){
fast = fast.next;
slow = slow.next;
}
slow.next = slow.next.next;
return head;
}
c++ ListNode *removeNthFromEnd(ListNode *head, int n) {
if(head == NULL || head->next == NULL)
return NULL;
ListNode * first = head;
ListNode * second = head;
for(int i = 0;i < n;i++)
first = first->next;
if(first == NULL)
return head->next;
while(first->next != NULL)
{
first = first->next;
second = second->next;
}
second->next = second->next->next;
return head;
}
相关文章推荐
- Node学习笔记(二):事件驱动
- Node.js(1)
- Swap Nodes in Pairs(easy)
- webStorm进行nodeJs开发
- [leetcode] 【链表】19. Remove Nth Node From End of List
- Leetcode 之Populating Next Right Pointers in Each Node II(51)
- Node.js学习
- Delete Node in a Linked List
- node.js调试
- Node.js Express目录结构
- Mac下安装Node.js服务器
- 嵌入式开发语言 -- nodejs
- HDFS 文件权限
- Eclipse下Nodejs项目配置步骤
- node.js npm mysql 相关
- 转“近期nodejs-web开发的一些总结”,大家都差不多
- nodejs的zookeeper模块及web管理工具node-zk-browser的安装
- nodejs中npm常用命令
- 读书笔记之《深入浅出Node.js》(4)
- 深入理解node exports和module.exports区别