码迷,mamicode.com
首页 > 其他好文 > 详细

笔试算法题(08):输出倒数第K个节点

时间:2014-05-19 12:07:16      阅读:376      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   code   c   java   

出题:输入一个单向链表,要求输出链表中倒数第K个节点

分析:利用等差指针,指针A先行K步,然后指针B从链表头与A同步前进,当A到达链表尾时B指向的节点就是倒数第K个节点;

解题:

bubuko.com,布布扣
 1 struct Node {
 2         int v;
 3         Node *next;
 4 };
 5 Node* FindLastKth(Node *head, int k) {
 6         if(head==NULL) {
 7                 printf("\nhead is NULL\n");
 8                 exit(0);
 9         }
10         Node *first=head, *second=head;
11         int step=1;
12         /**
13          * 由于链表末尾没有哑节点,所以注意边界关系,
14          * first实际上是先走了k-1步
15          * */
16         for(int i=1;i<k;i++) {
17                 if(first->next != NULL) {
18                         first=first->next;
19                         step++;
20                 }
21         }
22         /**
23          * 注意判断当链表长度小于k的情况
24          * */
25         if(step<k) {
26                 printf("\nlist is shorter than k\n");
27                 exit(0);
28         }
29         /**
30          * first和second同步前进
31          * */
32         while(first->next != NULL) {
33                 first=first->next;
34                 second=second->next;
35         }
36         return second;
37 }
bubuko.com,布布扣

 

笔试算法题(08):输出倒数第K个节点,布布扣,bubuko.com

笔试算法题(08):输出倒数第K个节点

标签:style   blog   class   code   c   java   

原文地址:http://www.cnblogs.com/leo-chen-2014/p/3735577.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!