数据结构与算法3:链表2
来源:互联网 发布:网络电视机顶合 编辑:程序博客网 时间:2024/06/04 18:40
找到链表中倒数第K个节点
使用两个指针实现,一个指针先走K步,然后开始一起走动;类似的题目找到链表的中间节点,可以使用快慢指针,一个指针走一步,另一个指针走两步
#include <stdlib.h>#include <stdio.h>typedef struct tag_LinkNode{ int data; struct tag_LinkNode *next; } LinkNode;LinkNode * init_link(int num){ LinkNode *head = NULL; LinkNode *pstLink; num = 2*num; while(num > 0) { pstLink = (LinkNode *)malloc(sizeof(LinkNode)); pstLink->data = num/2; if (!head) { head = pstLink; head->next = NULL; continue; } pstLink->next = head->next; head->next = pstLink; num--; } return head;}void destory_link(LinkNode *head){ LinkNode *pstLink; pstLink = head; while(pstLink != NULL) { head = head->next; free(pstLink); pstLink = head; }}void print_link(LinkNode *head){ LinkNode *pstLink; int num = 0; pstLink = head; while(pstLink != NULL) { printf("%d:%p:%d\n", num++, pstLink, pstLink->data); pstLink = pstLink->next; } printf("\n");}LinkNode * find_last_k_node(LinkNode *head, int k){ LinkNode *pstCurrent = head; LinkNode *pstRunning = head; while(!(pstRunning == NULL || 0 == k)) { pstRunning = pstRunning->next; k--; } /* 表示长度没有K长 */ if (0 != k) { printf("bad k\n"); return NULL; } while (NULL != pstRunning) { pstRunning = pstRunning->next; pstCurrent = pstCurrent->next; } printf("find:%p:%d\n", pstCurrent, pstCurrent->data); return pstCurrent;}int main(int argc, char *args[]){ LinkNode *head; int num, k; if (argc != 3) { printf("use a.out num k\n"); return 1; } num = atoi(args[1]); k = atoi(args[2]); head = init_link(num); print_link(head); find_last_k_node(head, k); destory_link(head); return 0;}
效果:
root@ubuntu:/home/cling60/src/struct/LinkedList# ./a.out 10 210:0x82d6008:101:0x82d6148:02:0x82d6138:13:0x82d6128:14:0x82d6118:25:0x82d6108:26:0x82d60f8:37:0x82d60e8:38:0x82d60d8:49:0x82d60c8:410:0x82d60b8:511:0x82d60a8:512:0x82d6098:613:0x82d6088:614:0x82d6078:715:0x82d6068:716:0x82d6058:817:0x82d6048:818:0x82d6038:919:0x82d6028:920:0x82d6018:10find:0x82d6008:10root@ubuntu:/home/cling60/src/struct/LinkedList# ./a.out 10 220:0x8766008:101:0x8766148:02:0x8766138:13:0x8766128:14:0x8766118:25:0x8766108:26:0x87660f8:37:0x87660e8:38:0x87660d8:49:0x87660c8:410:0x87660b8:511:0x87660a8:512:0x8766098:613:0x8766088:614:0x8766078:715:0x8766068:716:0x8766058:817:0x8766048:818:0x8766038:919:0x8766028:920:0x8766018:10bad k
阅读全文
0 0
- 数据结构与算法3:链表2
- 数据结构与算法-链表
- 数据结构与算法:链表
- 数据结构与算法 -- 链表
- 数据结构与算法:链表
- 数据结构与算法(2)
- 数据结构与算法2
- [数据结构与算法] 2,算法
- 数据结构与算法3:链表3
- 数据结构与算法(3 Reverse链表)
- 数据结构与算法(3)--链表
- 数据结构与算法3:链表1
- 数据结构与算法-基础数据结构(链表)
- 【数据结构与算法分析】链表
- 数据结构与算法JavaScript - 链表
- 数据结构与算法____链表
- 数据结构与算法3:KMP
- 数据结构与算法3:线性结构与线性表-链表
- Simplescalar在Ubuntu12.04 64位上的安装流程
- run as server和run as run java application
- Python Socket,并完成简单的聊天室
- 知识图谱三元组抽取
- utf8编码原理详解
- 数据结构与算法3:链表2
- 人脸识别 -- 绪论之《生物特征识别技术》开篇
- error LNK2019: 无法解析的外部符号 __imp____glutInitWithExit@12,该符号在函数 _glutInit_ATEXIT_HACK@8 中被引用
- vue中使用base64和md5
- 从头搭建IntelliJ IDEA环境
- Mycat学习实战-Mycat读写分离
- Android消息推送:第三方消息推送平台详细解析
- Android性能:经典ListView适配器convertView缓存及复用机制
- CRF++相关