链表面试题(五)---寻找链表的倒数第k个结点O(N)
2017-05-17 00:01
337 查看
一、结构体定义:
二、函数实现
思路:定义两个指针a,b,一开始都指向链表的第一个结点,然后让a指针以每次走一个结点的走法,先走k-1步,此时b指针仍然在第一个结点处,这时这两个指针之间相差k-1个结点,然后让两个指针都以每次走一步的走法同时向前走,直到a指针走到尾部,此时b指针所指向的结点,就是链表倒数第k个结点;(个人觉得就是拿了一个k厘米的尺子,从链表的尾部丈量k距离的结点)
typedef struct ListNode//定义结点 { DataType data; struct ListNode* next; }ListNode,*PListNode; typedef struct PList//定义一个成员是指向结点的指针的结构体 { PListNode PHead; }PList,*PList;
二、函数实现
思路:定义两个指针a,b,一开始都指向链表的第一个结点,然后让a指针以每次走一个结点的走法,先走k-1步,此时b指针仍然在第一个结点处,这时这两个指针之间相差k-1个结点,然后让两个指针都以每次走一步的走法同时向前走,直到a指针走到尾部,此时b指针所指向的结点,就是链表倒数第k个结点;(个人觉得就是拿了一个k厘米的尺子,从链表的尾部丈量k距离的结点)
PListNode FindKNode(PList PList,int k) { PListNode front=NULL; PListNode back=NULL; PListNode del=NULL; int i=0; assert(PList); front=PList->PHead; back=PList->PHead; if (PList->PHead==NULL||k<=0)//如果是空链表或者k<=0 { return NULL; } else //如果不是空链表,k>0 { for(i=1;i<k;i++) //front先走到k-1步 { if (front) { front=front->next; } else//当k的值大于结点个数 { return NULL; } } while (front->next) { front=front->next; back=back->next; } return back; } }
相关文章推荐
- 《剑指Offer》面试题:寻找链表中倒数第k个结点
- 面试题13:链表中倒数第k个结点
- 寻找链表中倒数第K个结点的位置
- 剑指offer-面试题15.链表中倒数第k个结点
- 链表面试题---删除倒数第k个结点、逆置单链表
- 剑指offer面试题15 链表中倒数第k个结点
- 程序员面试题精选100题(09)-链表中倒数第k个结点[数据结构]
- [程序员面试题精选100题]9.链表中倒数第k个结点
- 剑指Offer_面试题15_链表中倒数第k个结点
- 剑指offer-面试题15.链表中倒数第k个结点
- 面试题15:链表中倒数第k个结点
- 剑指offer面试题15 链表中倒数第K个结点
- 剑指Offer:面试题15 链表中倒数第k个结点
- 程序员面试题精选100题(09)-链表中倒数第k个结点[数据结构]
- 剑指offer代码解析——面试题15求链表中倒数第K个结点
- 【剑指offer】面试题15:链表中倒数第k个结点
- 剑指offer--面试题15:链表中倒数第k个结点
- 剑指Offer系列-面试题15:链表中倒数第K个结点
- 面试题15:链表中倒数第k个结点
- 剑指offer代码解析——面试题15求链表中倒数第K个结点