[LintCode]166.链表倒数第n个节点
来源:互联网 发布:石家庄整站优化 编辑:程序博客网 时间:2024/06/02 08:22
找到单链表倒数第n个节点,保证链表中节点的最少数量为n。
样例
给出链表 3->2->1->5->null和n = 2,返回倒数第二个节点的值1.
一种是先遍历一遍单链表,计算链表的长度,然后再次遍历,直到到达节点数减去n的节点,返回结果。实际情况中若链表数目很多而n相对不大,这种方法需要大约两次遍历。
更简单的是采用双指针。快指针比慢指针提前n个单元。当快指针到达单链表尾部时,慢指针指向待删除节点的前节点。
双指针方法可以解决很多问题,比如上一个求单链表是否有环,也是使用两个指针,一个进一步,一个进两步,如果有环两指针就会相遇。
/** * Definition of ListNode * class ListNode { * public: * int val; * ListNode *next; * ListNode(int val) { * this->val = val; * this->next = NULL; * } * } */class Solution {public: /** * @param head: The first node of linked list. * @param n: An integer. * @return: Nth to last node of a singly linked list. */ ListNode *nthToLast(ListNode *head, int n) { if(head==NULL||n==0){ return NULL; } ListNode *p=head; ListNode *pre=head; while(--n){ if(p->next==NULL){ return NULL; }else{ p=p->next; } } while(p->next){ p=p->next; pre=pre->next; } return pre; }};
阅读全文
0 0
- Lintcode 166.链表倒数第n个节点
- [LintCode]166.链表倒数第n个节点
- 链表倒数第n个节点(LintCode)
- LintCode- 链表倒数第n个节点
- lintcode(E)链表倒数第n个节点
- LintCode 链表倒数第n个节点
- 链表倒数第n个节点-LintCode
- lintcode——链表倒数第n个节点
- LintCode-链表倒数第n个节点
- lintcode 166 链表倒数第n个节点
- Lintcode -链表倒数第n个节点
- 链表倒数第n个节点 -LintCode
- lintcode链表倒数第n个节点
- Lintcode链表倒数第n个节点
- 链表倒数第n个节点
- 链表倒数第n个节点
- 链表倒数第n个节点
- 链表倒数第n个节点
- LintCode编程题汇总(更新中)
- java学习笔记:面向对象编程之工具类的创建与单例设计模式
- php学习笔记--文件操作
- 前端面试经典题目
- 上楼梯
- [LintCode]166.链表倒数第n个节点
- 连接sqlite数据库操作C#版
- 约瑟夫环
- 存储过程(一)
- 算法基础
- Java-List分页工具
- 测试区块链的防篡改性
- Runtime error——Explorer.EXE
- geth配置中,genesis.json的几个问题