查找链表倒数的节点
2016-07-18 00:42
211 查看
虽然马上要实习了,但是基本的东西不要忘了,把以前一些东西继续温故知新。对于查找链表倒数的节点这个问题,就比较经典了,老生常谈的。大家都知道,最经典的解法就是首先找到k-1个,然后两个指针,一前一后跑,知道后面的指针跑到最后一个,前面的指针也就是指向了倒数第k个节点了。
不过在这里需要注意以下几种情况。
一、当链表为空时
二、当输入非法时,例如输入小于等于0
三、当输入的k大于链表的总节点数时
这些情况在源代码中都有说明,如果有问题,请大家及时提醒我更正。
加油坚持每一天!
不过在这里需要注意以下几种情况。
一、当链表为空时
二、当输入非法时,例如输入小于等于0
三、当输入的k大于链表的总节点数时
这些情况在源代码中都有说明,如果有问题,请大家及时提醒我更正。
/*这是一道经典的面试题,求得链表中的第倒数第k个节点*/ #include<stdio.h> #include<stdlib.h> typedef struct data{ int value; struct data * next; } * Node; /*开始查找倒数第k个*/ Node search_k_Node(Node head,int k){ Node front,rear = head; int i; if(rear == NULL){ printf("此链表为空链表"); return NULL; } if(k <= 0){ printf("输入位置不合法"); return NULL; } for(i = 1;rear != NULL && i< k; i++){ /*这里根据i的初始值不容,选择不同的结束条件,还有,如果链表带头节点,也需要分情况*/ rear = rear->next; } //如果rear等于NULL,并且i不等于K,证明输入的k大于节点总数 if(NULL == rear && i <= k){ printf("输入的k大于总节点数"); return NULL; } front = head; while(rear->next != NULL){ rear = rear->next; front = front->next; } return front; } //输出 void outPuts(Node head){ Node p; for(p = head; p != NULL; p= p->next){ printf("%d ",p->value); } } //初始化 Node initLinkedList(){ Node head = NULL,p = NULL,q; int i; for(i = 1; i<=10;i++){ if(i == 1){ head = (Node)malloc(sizeof(struct data)); head->next = NULL; head->value = i; p = head; } else{ q = (Node)malloc(sizeof(struct data)); q->next = NULL; q->value = i; p->next = q; p=q; } } return head; } int main(void){ Node head,result; int k; printf("请输入要求的的倒数第k个节点的k:"); scanf("%d",&k); head = initLinkedList(); outPuts(head); result = search_k_Node(head,k); if(NULL != result){ printf("结果是:%d",result->value); } return 0; }
加油坚持每一天!
相关文章推荐
- [C/C++]反转链表
- 关于指针的一些事情
- C#实现基于链表的内存记事本实例
- C#模拟链表数据结构的实例解析
- C# Pointer指针应用实例简述
- C和指针小结(推荐)
- C++智能指针实例详解
- 浅谈C++指针(必看)
- C++指向函数的指针实例解析
- 关于c语言指针的两处小tip分享
- 浅谈c/c++中使用指针需要注意的问题
- 浅析iterator与指针的区别
- 探讨C++中数组名与指针的用法比较分析
- C++编程指向成员的指针以及this指针的基本使用指南
- 详解C++中的指针、数组指针与函数指针
- C语言实现带头结点的链表的创建、查找、插入、删除操作
- C++中字符串以及数组和指针的互相使用讲解
- C语言安全之数组长度与指针实例解析
- C++中指向对象的常指针与指向常对象的指针详解
- 指向变量的常指针与指向常变量的指针详细解析