笔试题六:链表的顺序查找 并输出

原创 2013年12月04日 11:16:51

链表的节点结构为:

struct ListNode

{

 int data;

 ListNode * nextNode;

}

顺序查找:

int sequential_search(const List<int> &the_list,
					  const Key &target)
/*Post: If an entry in the_list is equal to target, then return the position
        of this entry. 
		Otherwise return -1 
*/
{
	int position;
	int s=the_list.size();
	for(position=0;position<s;position++){
		int data;
		the_list.retrieve(position,data);
		if(data==target){
			return position;
		}
	}
	return -1;
}


题目:输入一个单向链表,输出该链表中倒数第k个结点:

  

我们在遍历时维持两个指针,第一个指针从链表的头指针开始遍历,在第k-1步之前,第二个指针保持不动;在第k-1步开始,第二个指针也开始从链表的头指针开始遍历。由于两个指针的距离保持在k-1,当第一个(走在前面的)指针到达链表的尾结点时,第二个指针(走在后面的)指针正好是倒数第k个结点。

实现:

 

#include "stdafx.h"
#include<iostream>
#include<queue>
using namespace std;

typedef struct node{
        int data;
        struct node *next;
}Node,*List;

List createList(int N)
{
	List head = (List)malloc(sizeof(Node));
	head->data = 0;
	head->next=NULL;
	int count = 0;
	List p = head;
	while(count<N)
	{	count++;
		List s = (List)malloc(sizeof(Node));
		s->data = count;
		s->next = NULL;
		p->next = s;
		p = s;
	}
	return head;
}

void traverse(List head)
{
	if(head == NULL)
	{
		return;
	}
	List p = head->next;
	while(p)
	{
		cout<<p->data<<" ";
		p = p->next;
	}
	cout<<endl;
}
List find(List head,int index)
{
	int count = 0;
	List first = head;
	List second = NULL;
	while(first&&count<index)//first首先找到第index个元素
	{
		first = first->next;
		count++;
	}
	//cout<<"count: "<<first->data<<endl;
	if(first!=NULL)//如果没有到链表尾
	{
		second = head;
		while(first!=NULL)
		{
			first = first->next;
			second = second->next;
		}
	}
	return second;
}
int main()
{
	int N = 20;
	List head = createList(N);
	traverse(head);
	List no = find(head,5);
	if(no!=NULL)
	{
		cout<<no->data<<endl;
	}else{
		cout<<"can't find"<<endl;
	}
    getchar();
    return 0;
}


 

链表面试题总结(一)

基于上一次写的链表,现在,我们来讨论下面这些问题。1.链表的冒泡排序 2.删除无头非尾节点 3.反转链表 4.在当前节点前插入一个数据x 5.查找链表的中间节点。 6.删除单链表的倒数第K个...
  • qq_26768741
  • qq_26768741
  • 2016年06月11日 12:06
  • 3853

链表面试笔试题目总结

链表是最基本的数据结构,凡是学计算机的必须的掌握的,在面试的时候经常被问到,关于链表的实现,百度一下就知道了。在此可以讨论一下与链表相关的练习题。 (1)在单链表上插入一个元素,要求时间复杂度为...
  • ywok526
  • ywok526
  • 2014年08月30日 22:04
  • 869

面试题一 C/C++面试秘笈之单链表的创建,增删改查及打印

/**面试题1  *编程实现一个单链表 */ typedef struct node{     int data;//节点内容     node * next;//下一个节点 }node; //创...
  • u013007305
  • u013007305
  • 2016年02月23日 16:00
  • 513

Java单链表基本操作(一)--顺序查找

本系列博文,将围绕一下几个方面: Java单链表基本操作: (一)顺序查找; (二)指定位置增加节点; (三)删除当前节点; (四)单链表反转; (五)输出倒数第K个节点; (六)删除重...
  • y999666
  • y999666
  • 2016年04月01日 10:58
  • 1748

常见的链表面试题大汇总:

常见的链表面试题大汇总: 源代码下载链接 1,创建一个链表结点 2,遍历链表中的所有结点 3,倒序打印链表 4,往链表末尾添加结点 5,往链表前端添加结点,6,获取链表的节点数目 7,销...
  • mengni123321
  • mengni123321
  • 2015年09月05日 20:57
  • 415

链表面试笔试题目总结

链表是最基本的数据结构,凡是学计算机的必须的掌握的,在面试的时候经常被问到,关于链表的实现,百度一下就知道了。在此可以讨论一下与链表相关的练习题。 1、在单链表上插入一个元素...
  • see__you__again
  • see__you__again
  • 2016年07月23日 14:25
  • 714

腾讯后台模拟笔试题(附答案)

一、不定项选择题1、以下不属于tcp连接断开的状态的是? A. TIME_WAIT B. FIN_WAIT_1 C. SYNC_SENT D. FIN_WAIT_22、关于红黑树跟AVL树,以下哪种说...
  • lisong694767315
  • lisong694767315
  • 2016年04月03日 18:05
  • 5389

单链表的顺序插入、删除、查找/code/c&c++

#include #include #define MAXLEN 20 typedef struct node { int data; node * next; }nod...
  • baidu_36757829
  • baidu_36757829
  • 2016年11月23日 19:11
  • 315

2017招商银行笔试01

招商银行笔试: 6.A(不是很确定) HashMap 实际上是一个链表的数组,HashMap 的一个功能缺点是它的无序性,被存入到 HashMap 中的元素,在遍历 HashMap 时,其输出是无...
  • chdyiboke
  • chdyiboke
  • 2016年09月12日 21:26
  • 2482

链表的基本操作(C语言版):建立,插入,删除,查找,输出

//1、链表的基本操作(不带头结点)//**的含义把握不准确,要认真研究练习 #include #include typedef struct list { int data; struc...
  • xiaohuizi2009
  • xiaohuizi2009
  • 2013年03月04日 12:44
  • 5767
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:笔试题六:链表的顺序查找 并输出
举报原因:
原因补充:

(最多只允许输入30个字)