您的位置:首页 > 编程语言 > C语言/C++

剑指offer刷题之c++实现的求链表中倒数第k个值

2015-08-08 12:13 309 查看
#include "myHead.h"
#include "allListNode.h"
/*
返回链表中倒数第k个节点(k=1,2,。。。) 
设总共n个节点。倒数第k个就是正数第n-k+1.如n=6,k=3,倒数第三个就是正数第4个。
为了减少两趟链表遍历(主要是减少一趟链表遍历求n),则牺牲空间拯救时间。
搞两个指针,一个向前走k-1步,当他准备走第k步的时候,另一个指针才开始走第一步。这样,前面指针和这个指针中间差值(k-1) 
*/ 
ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) {
    ListNode *pre;
	ListNode *p;
    int t = 0;
    if(pListHead == NULL || k==0)
    	return NULL;
    pre = pListHead;
    p = pListHead;
	while((t++)<(k-1)){
		if(p->next!=NULL){
			p = p->next;
		}
		else return NULL;
	} 
	while(p->next!=NULL){
		p=p->next;
		pre = pre->next;
	}
	cout<<pre->val; 
	return pre;    	
}

int main(){
	ListNode *h ;
	h= createListNode();
	FindKthToTail(h,0);
	return 1; 
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: