[google面试CTCI] 2-2 找出链表的倒数第n个节点元素
2013-10-20 09:28
274 查看
【链表】
Q:Implement an algorithm to find the nth to last element of a singly linked list .
题目:找出链表的倒数第n个节点元素。
解答:
方法一:利用两个指针p,q,首先将q往链表尾部移动n位,然后再将p、q一起往后移,那么当q达到链表尾部时,p即指向链表的倒数第n个节点。
node* find_nth_to_last(node* head,int n) { if(head==NULL || n<1) return NULL; node*p,*q; p=q=head; while(q!=NULL && n--){ q=q->next; } if(n>=0) return NULL; while(p!=NULL && q!=NULL){ p=p->next; q=q->next; } return p; }
方法二:可以先计算出节点个数,即从头到尾遍历一次链表,得到个数m,那么倒数第n个元素也即第m-n+1个元素.与方法一是同样的思维,只是具体操作方式不同,代码略.
JAVA代码:
LinkedListNode nthToLast(LinkedListNode head, int n) { if (head == null || n < 1) { return null; } LinkedListNode p1 = head; LinkedListNode p2 = head; for (int j = 0; j < n - 1; ++j) { // skip n-1 steps ahead if (p2 == null) { return null; // not found since list size < n } p2 = p2.next; } while (p2.next != null) { p1 = p1.next; p2 = p2.next; } return p1; }
作者:Viidiot 微信公众账号:linux-code
Q:Implement an algorithm to find the nth to last element of a singly linked list .
题目:找出链表的倒数第n个节点元素。
解答:
方法一:利用两个指针p,q,首先将q往链表尾部移动n位,然后再将p、q一起往后移,那么当q达到链表尾部时,p即指向链表的倒数第n个节点。
node* find_nth_to_last(node* head,int n) { if(head==NULL || n<1) return NULL; node*p,*q; p=q=head; while(q!=NULL && n--){ q=q->next; } if(n>=0) return NULL; while(p!=NULL && q!=NULL){ p=p->next; q=q->next; } return p; }
方法二:可以先计算出节点个数,即从头到尾遍历一次链表,得到个数m,那么倒数第n个元素也即第m-n+1个元素.与方法一是同样的思维,只是具体操作方式不同,代码略.
JAVA代码:
LinkedListNode nthToLast(LinkedListNode head, int n) { if (head == null || n < 1) { return null; } LinkedListNode p1 = head; LinkedListNode p2 = head; for (int j = 0; j < n - 1; ++j) { // skip n-1 steps ahead if (p2 == null) { return null; // not found since list size < n } p2 = p2.next; } while (p2.next != null) { p1 = p1.next; p2 = p2.next; } return p1; }
作者:Viidiot 微信公众账号:linux-code
相关文章推荐
- [google面试CTCI] 2-2 找出链表的倒数第n个节点元素
- 找出链表倒数第n个节点元素的二个方法
- 程序员面试题目总结--链表(2)【找出单链表中的倒数第K个元素】
- [google面试CTCI] 2-1.移除链表中重复元素
- [google面试CTCI] 2-3 只给定链表中间节点指针,如何删除中间节点?
- [google面试CTCI] 2-3 只给定链表中间节点指针,如何删除中间节点?
- C/C++面试之算法系列--一次遍历找链表倒数第n个节点
- leetcode:Remove Nth Node From End of List(删除链表倒数第n个节点)【面试算法题】
- [google面试CTCI] 2-1.移除链表中重复元素
- 删除链表中倒数第n个节点
- 查找单链表中倒数第n个节点
- [LeetCode] 19. Remove Nth Node From End of List 删除链表的倒数第N个节点 @python
- 请设计一个既节省时间又节省空间的算法来找出该链表中的倒数第m个元素
- 删除单向链表倒数第n个节点
- LeetCode算法练习(删除链表的倒数第N个节点)
- 找出链表中倒数第k个节点
- 【LintCode 简单】166. 链表倒数第n个节点
- Lintcode 174.删除链表中倒数第n个节点
- lintcode 174 删除链表中倒数第n个节点
- 《程序员面试金典》--找出链表中倒数第k个节点