求链表的倒数第k个数值(亲测有效,环境VS2010)
来源:互联网 发布:恺英网络股票 编辑:程序博客网 时间:2024/05/11 03:35
题目:输入一个链表,输出该链表中倒数第k个结点的值。为符合大家的习惯的,本题目从1开始计数,级链表的尾结点是倒数第一个结点。
代码如下:
#include <stdio.h>#include <stdlib.h>struct ListNode{int m_pValue;ListNode* m_pNext;};/*输入链表为NULL或k为0时都安全返回,鲁棒性良好*/ListNode* FindkthToTail(ListNode* pListHead,unsigned int k){if(pListHead==NULL||k==0)return NULL;ListNode* pFirst=pListHead;ListNode* pSecond=NULL;for(unsigned int i=0;i<k-1;i++){if(pFirst->m_pNext!=NULL)pFirst=pFirst->m_pNext;elsereturn NULL;}pSecond=pListHead;while(pFirst->m_pNext!=NULL){pFirst=pFirst->m_pNext;pSecond=pSecond->m_pNext;}return pSecond;}int main(){//ListNode* pListHead=NULL;//用于测试输入为NULLListNode* pListHead=(ListNode *)malloc(sizeof(ListNode));ListNode* pNew=NULL;ListNode* pOld=pListHead;int input=0;//输入for(int i=0;i<10;i++)//创建链表,给链表输入0-9这10个数{pNew=(ListNode *)malloc(sizeof(ListNode));pNew->m_pValue=i;pNew->m_pNext=NULL;pOld->m_pNext=pNew;pOld=pNew;}scanf("%d",&input);ListNode* p=FindkthToTail(pListHead,input);if(p==NULL)return -1;printf("%d",p->m_pValue);return 0;}
一般我们会从头到尾遍历链表,但此种方法时间复杂度为O(n*n)。上面这个程序运用两个指针来遍历,时间复杂度为O(n).
0 0
- 求链表的倒数第k个数值(亲测有效,环境VS2010)
- 求链表的倒数第K个节点
- 求链表的倒数第K个节点
- 求链表的倒数第k个节点
- 求链表的倒数第K个结点
- 求链表的倒数第k个节点
- 求链表的倒数第k个节点
- 剑指offer--求链表的倒数第k个结点
- 链表的倒数第k个元素(mark)
- 找链表的倒数第k个节点
- 求单链表的倒数第k个元素
- 字符串的倒数第K个字符
- 找链表的倒数第k个节点
- 单链表的倒数第K个节点
- 算法(一)求链表中的倒数第K 个结点
- 求链表倒数第k个节点
- 求链表倒数第K个节点
- 求链表中的倒数第K个结点
- 移除IIS默认的响应头
- 什么叫回调函数?
- python 类的访问限制
- Linux 下 Eclipse编译找不到so库文件的解决方法
- 颠覆式前端UI开发框架:React
- 求链表的倒数第k个数值(亲测有效,环境VS2010)
- 【iOS】简体与繁体相互转换的小程序
- 2014年蓝桥杯预选赛 C/C++ 本科A组试题--切面条
- 测试slow http拒绝服务攻击
- 使用 React 和 Flux 创建一个记事本应用
- Struts2工作原理
- 建筑学概论
- Oracle 索引的 dump leaf block
- n的k次方