链表中倒数第K个结点

题目描述

  输入一个链表,输出该链表中倒数第K个结点。

题目分析

  定义 2 个指针 p 和 q,让p指针先跑,并且记录节点数,当p指针跑了k-1个节点后,q指针再跑,当p指针跑到最后时,q 所指指针就是倒数第k个节点。

测试代码

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <assert.h>
 4 
 5 NODE * alloc_one_node()
 6 {
 7     NODE * load = NULL;
 8 
 9     load = malloc(sizeof(NODE));
10     assert(load != NULL);
11     load->next = NULL;
12 
13     return load;
14 }
15 
16 NODE * creat_linked()
17 {
18     NODE * load = NULL;
19 
20     load = alloc_one_node();
21     
22     return load;
23 }
24 
25 NODE * linked_end(NODE * head)
26 {
27     NODE * load = head;
28 
29     while(load->next != NULL)
30     {
31         load = load->next;
32     }
33 
34     return load;
35 }
36 
37 NODE * add_new_linked(NODE * head, int date)
38 {
39     NODE * new = NULL;
40     NODE * load = linked_end(head);
41 
42     new = alloc_one_node();
43     new->date = date;
44     load->next = new;
45 
46     return load;
47 }
48 
49 void print_one_node(NODE * load)
50 {
51     printf("%d ", load->date);
52 }
53 
54 void print_all_node(NODE * head)
55 {
56     NODE * load = head;
57 
58     while(load->next != NULL)
59     {
60         load = load->next;
61         print_one_node(load);
62     }
63     putchar('\n');
64 }
65 
66 void print_kth_tail(NODE * head, int k)
67 {
68     NODE * p, *q;
69 
70     p = q = head;
71     while (p->next != NULL) 
72     {
73         while(k-- > 1)
74         {
75             p = p->next;
76         }
77            p = p->next;
78         q = q->next;
79     }
80     print_one_node(q);
81     putchar('\n');
82 }
83 
84 int main(void)
85 {
86     NODE * head = NULL;
87 
88     head = creat_linked();
89     add_new_linked(head, 1);
90     add_new_linked(head, 2);
91     add_new_linked(head, 3);
92     add_new_linked(head, 4);
93     add_new_linked(head, 5);
94 
95     print_all_node(head);
96     print_kth_tail(head, 5);
97 
98     return 0;
99 }

 

转载于:https://www.cnblogs.com/maxin/p/5996823.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值