华为OJ(输出单链表倒数第K个节点)
2015-08-09 16:28
441 查看
可以有两种方法实现:
1 遍历链表,可以求出链表节点数N,然后走N-k步(OJ原题注明最后一个节点为倒数第0个节点,故需先走N-K步)
该方法比下面快慢指针复杂,实现起来也简单,以后有时间再补充。
2 快慢指针(剑指offer等书上应该都有,该方法同样可用于判断环形链表,ps:当时百度实习面试栽在这里了)
pBehind,pAhead初始化为head头指针,pAhead先走k步,当pAhead指向尾结点时,pBehind即为所求结点。
代码:
1 遍历链表,可以求出链表节点数N,然后走N-k步(OJ原题注明最后一个节点为倒数第0个节点,故需先走N-K步)
该方法比下面快慢指针复杂,实现起来也简单,以后有时间再补充。
2 快慢指针(剑指offer等书上应该都有,该方法同样可用于判断环形链表,ps:当时百度实习面试栽在这里了)
pBehind,pAhead初始化为head头指针,pAhead先走k步,当pAhead指向尾结点时,pBehind即为所求结点。
代码:
<span style="font-size:18px;">#include<iostream> //#include<Windows.h> using namespace std; struct Node { int data; struct Node* next; }; int find_kth_data(Node*,int); int main() { Node * head,*p; head=p=(Node*)malloc(sizeof(Node)); int n; cin>>n; cin>>p->data; p->next=NULL; for(int i=0;i<n-1;++i) { p=p->next=(Node*)malloc(sizeof(Node)); cin>>p->data; p->next=NULL; } int k; cin>>k; int kth_data=find_kth_data(head,k); cout<<kth_data<<endl; //system("pause"); return 0; } int find_kth_data(Node* phead,int k) { if(k<0) return NULL; Node* pAhead,*pBehind; pAhead=pBehind=phead; if(k==0) while(pBehind->next) pBehind=pBehind->next; else { for(int i=0;i<k;++i) { pAhead=pAhead->next; } while(pAhead->next) { pAhead=pAhead->next; pBehind=pBehind->next; } } return pBehind->data; }</span>
相关文章推荐
- POJ 1995 Raising Modulo Numbers
- cocoapods
- white-space: nowrap;
- python 爬虫中文乱码问题
- GDB调试程序(三)
- Linux面试
- 大二层技术对比分析
- DNS挟持介绍
- win7 64位 鼠标右键explorer重启解决方法
- 【QQ机器人开发】茉莉QQ机器人3.X系列插件开发文档
- 2015 Multi-University Training Contest 1 hdu 5296 Annoying problem
- 希望大家帮我回答个jquery问题
- UI07_UITableView
- HDU 5364-Distribution money(水题)
- Android文件上传
- poj 1611
- codeforces 534B B. Covered Path(dp)
- 零基础学python-1.3 通过idle启动python
- 零基础学python-1.3 通过idle启动python
- SAP S/4 HANA 精简课程公开课笔记