查找单链表倒数第k个元素
来源:互联网 发布:数据库模型图是什么 编辑:程序博客网 时间:2024/05/22 10:48
查找单链表倒数第m个结点,要求时间复杂度为O(n).(提示,使用双指针)
解题思路:
常规思路为先获取链表的长度N,然后返回N-k+1位置处的结点即可。但是中需要遍历两次链表。
我们使用另一种算法,设定两个指针p1,p2.将这两个指针都向第一个结点,让p1先走k步,然后两个指针一起向后移动,当p1到达最后一个结点时,p2指针刚好指向链表的倒数第k个结点。
关键算法:
int getK(Node *link, int k){ Node *p1, *p2; int i; if (link->next == NULL || k == 0) return -1; p1 = link->next; for (i = 1; i < k; i++) { if (p1->next == NULL) return -1; p1 = p1->next; } p2 = link->next; while (p1->next != NULL) { p1 = p1->next; p2 = p2->next; } return p2->number;}
完整程序如下:
/**************************************************************Problem: 查找单链表倒数第N个元素,要求复杂度O(n)User: xiaomingLanguage: C****************************************************************/#include <stdio.h>#include <stdlib.h>typedef struct node{ int number; struct node * next;} Node;int getK(Node *link, int k);int main(){ int n, k, i, temp; int flag; while (scanf("%d %d", &n, &k) != EOF && n >= 0 && n <= 1000 && k >= 0 && k <= 1000) { Node *link = (Node *)malloc(sizeof(Node)); link->next = NULL; flag = 0; Node *tail; tail = link; for (i = 0; i < n; i++) { //scanf("%d", &temp); Node *n = (Node *)malloc(sizeof(Node)); n->next = tail->next; tail->next = n; tail = tail->next; n->number = i + 1; } int numberK = getK(link, k); numberK == -1 ? printf("NULL\n") : printf("%d\n", numberK); } return 0;}int getK(Node *link, int k){ Node *p1, *p2; int i; if (link->next == NULL || k == 0) return -1; p1 = link->next; for (i = 1; i < k; i++) { if (p1->next == NULL) return -1; p1 = p1->next; } p2 = link->next; while (p1->next != NULL) { p1 = p1->next; p2 = p2->next; } return p2->number;}
0 0
- 查找单链表倒数第k个元素
- 单链表查找倒数第k个元素
- 查找单链表中倒数第k个元素
- 查找单链表中倒数第k个元素
- 查找单链表中倒数第k个元素
- 【题目8】查找单链表倒数第K个元素
- 查找单链表的倒数第K个元素
- 单链表查找倒数第k个节点
- 单链表查找倒数第k个节点
- 单链表查找倒数第k个节点
- 查找链表中倒数第k个元素的方法--c++
- 查找链表的倒数第k个元素
- 查找链表中倒数第k个节点元素
- 查找一个单向链表中倒数第K个元素
- 算法分析-查找单链表中的倒数第k个元素和中间元素
- 单链表查找倒数第N个元素&输出中间元素
- 如何找出单链表中的倒数第k个元素
- 一次遍历找出单链表中的倒数第k个元素
- iOS小明开发笔记(十二) (Quartz2D简单使用一)
- 经典队列存取
- 文字自适应label的frame
- 未备份etc下ssh目录之设置节点间无密码访问步骤
- Dsoframer注册方法
- 查找单链表倒数第k个元素
- 搭建javaweb项目
- Swift中文教程(十三) 继承
- Gerrit 使用
- -all_load和-force_load 的区别
- oracle数据库逻辑备份,通过 expect 自动转移到其他服务器
- 智谷趋势 | 中国面临一场清算式危机
- 文章标题
- Swift中文教程(十四) 初始化