`
GongQi
  • 浏览: 101001 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

求链表倒数第k个结点

 
阅读更多
题目描述: 输入一个单向链表,输出该链表中倒数第k个结点, 链表的倒数第0个结点为链表的尾指针。
第一反应是先遍历一遍链表,获得产度l,再遍历链表至l-k处,得到需求节点,这种做法不是最优
应该设置两个指针p、q,让p和q之间相距k个节点,然后让p、q同步向链表后走至链表尾节点,此时p指向的就是倒数第k个节点。
struct Node{
	char data;
	Node* next;
}
Node *p,*q;
Node* fun(Node *head,int k){
	assert(k>=0);//有效性检验
	p=q=head;
	for(;k>0&&q!=NULL;k--)
		q=q->next;
	if(k>0)return NULL;//避免k大于链表长度
	while(q!=NULL){
		p=p->next;
		q=q->next;
	}
	return p;
}
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics