链表中倒数第k个结点

题目描述

输入一个链表,输出该链表中倒数第k个结点。

/*struct ListNode 
{
	int val;    
	struct ListNode *next;    
	ListNode(int x):val(x), next(NULL) {    }
};*/
class Solution 
{
	public:    
		ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) 
		{        
			ListNode* p = pListHead;        
			ListNode* q = pListHead;        
			unsigned int number = 0;        
			while(number<k && p)  //p指针移动到第k个结点          
			{            
				++number;            
				p = p->next;        
			}        
			if(p==NULL&&number<k) //如果p为NULL,则链表中的元素个数小于k,返回NULL           
			{            
				return NULL;        
			}        
			else            //链表中的元素个数大于k,同步移动p和q,p到链表末尾,则q在倒数第k个结点
			{                
				while(p&&q)                
				{                    
					p = p->next;                    
					q = q->next;                
				}                
				return q;               
			}           
		}
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值