leetcode Remove Nth Node From End of List
2015-07-20 10:17
495 查看
first:
second: (AC)
第一次是想先遍历一次求出长度,然后再遍历一次找出倒数第n个节点删除, 但是不能被ac, 然后上网看了一下别人的方法。。。短小精悍,通过双指针实现,第一个指针先往后移n位, 然后两个指针再同步移动,第一个指针为空时停止移动。 还借助了一个额外节点来处理删除节点是头指针的情况, 我果然是渣渣, 每次都想的最笨的方法, 而且写的代码又烂,让我静一静(\再见)
[code]class Solution { public: ListNode* removeNthFromEnd(ListNode* head, int n) { if (head==NULL) { return NULL; } ListNode* ptmp = head; ListNode* pre = NULL; int count = 1; while (ptmp->next != NULL) { pre = ptmp; ptmp = ptmp->next; count++; } if (n==1) { pre->next = NULL; delete ptmp; } else { // 从前往后遍历 ptmp = head; pre = NULL; int tmp = count-n+1; if (tmp<0) { return NULL; } if (tmp == 1) { head == NULL; delete ptmp; } int num = 1; while (ptmp) { num++; pre = ptmp; ptmp=ptmp->next; if (num == tmp) { break; } } pre->next = ptmp->next; delete ptmp; } return head; } };
second: (AC)
[code]class Solution { public: ListNode* removeNthFromEnd(ListNode* head, int n) { if (head==NULL || n==0) { return NULL; } ListNode helper(0); helper.next = head; ListNode* fptr = head; ListNode* tptr = head; ListNode* ppre = &helper; while (n>0) { fptr = fptr->next; n--; } while (fptr) { ppre = tptr; tptr = tptr->next; fptr = fptr->next; } ppre->next = tptr->next; return helper.next; } };
第一次是想先遍历一次求出长度,然后再遍历一次找出倒数第n个节点删除, 但是不能被ac, 然后上网看了一下别人的方法。。。短小精悍,通过双指针实现,第一个指针先往后移n位, 然后两个指针再同步移动,第一个指针为空时停止移动。 还借助了一个额外节点来处理删除节点是头指针的情况, 我果然是渣渣, 每次都想的最笨的方法, 而且写的代码又烂,让我静一静(\再见)
相关文章推荐
- [读书笔记]深入浅出NodeJS——Node中的异步I/O
- Node:向经典致敬(八皇后)
- LeeCode-Swap Nodes in Pairs
- 理解inode
- LeeCode-Delete Node in a Linked List
- nodejs之async异步编程
- PHP vs Node.js
- NodeJS async实例详解:When to use what?
- ECMAScript 6教程 (二) 对象和函数
- Node JS文件操作fs
- Remove Nth Node From End of List
- Node JS 模块
- Permission denied: user=Administrator, access=WRITE, inode="hadoop":hadoop:supergroup:rwxr-xr-x
- Delete Node in a Linked List
- 【leetcode】Delete Node in a Linked List
- Node:Trie数(字典树)
- secondarynamenode无法启动
- node.js乱码
- 多次格式化namenode,datanode无法启动的解决办法
- #25 Reverse Nodes in k-Group