6.7-3求链表倒数第n项
来源:互联网 发布:互联网医院 知乎 编辑:程序博客网 时间:2024/06/05 10:11
求链式线性表的倒数第K项
1.建立双向链表
注意查询错误位置输出
2.考研题思路
定义两个指针a,b,都指向链表头节点,然后将b向后移k次,再将a,b同时向后移,当b到达链表末尾时a指向的那个节点值即是倒数第K项。注意特殊情况的考虑,比如链表总长度刚好等于K或者小于K等。
#include<stdio.h> #include<stdlib.h> typedef struct node *ptrNode; typedef ptrNode LinkList; //头结点 typedef ptrNode Position;//中间节点 typedef int ElementType; struct node{ ElementType Element; Position next; }; LinkList creatList(void) { LinkList head,r,p; int x; head = (struct node*)malloc(sizeof(struct node)); //生成新结点。节点生成很耗时,考虑改掉 r = head; scanf("%d",&x); while(x >= 0){ p = (struct node*)malloc(sizeof(struct node)); p->Element = x; r->next = p; r = p; scanf("%d",&x); } r->next = NULL; return head; } void printLastKth(LinkList L, int k) { Position ha, hb; int i; ha = L; hb = L; for(i = 0; i < k; i++){ hb = hb->next; if(hb == NULL) break; } if(hb == NULL) printf("NULL"); else{ while(hb != NULL){ hb = hb->next; ha = ha->next; } printf("%d",ha->Element); } } void destroyLinkList(LinkList L) { LinkList p,q; p = L->next; while(p){ q = p->next; free(p); p = q; } L = NULL; } int main(void) { LinkList L; int k; scanf("%d",&k); L = creatList(); printLastKth(L, k); destroyLinkList(L); return 0; }
阅读全文
0 0
- 6.7-3求链表倒数第n项
- 求链表的倒数第N个节点
- 求链表倒数第n个元素
- 查找单链表中倒数第n个节点
- 删掉倒数第N个节点
- 删除链表中倒数第n个节点
- 删除链表中倒数第n个节点
- 删除链表中倒数第n个节点
- 删除链表中倒数第n个节点
- 删除链表中倒数第n个节点
- 链表倒数第n个节点
- 链表倒数第n个节点
- 删除链表中倒数第n个节点
- 删除单链表倒数第n个节点
- 删除链表中倒数第n个节点
- 链表倒数第n个节点
- 求出链表中倒数第n个节点
- 删除链表中倒数第n个节点
- 2017-09-25校训练题题解
- js如何判断微信5.0
- HW问题改动_PDS
- leetcode-4-Median of Two Sorted Arrays
- JVM总结
- 6.7-3求链表倒数第n项
- HttpClient4.X 解决POST请求返回重定向问题
- nginx服务器高并发优化思路
- Spark体系概况
- springboot报错(三) webjars被拦截或找不到
- shell脚本基础
- 100. Same Tree (DFS)
- 以sqlserver处理父子级关系查询为列介绍with as、cast()、for xml path()、stuff()的使用
- CentOs7 自动获取IP地址图文详解