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

原创 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;
}


 

相关文章推荐

算法3.1 顺序查找(基于无序链表)(algs4)

符号表是一种存储键值对的数据结构,支持两种操作:插入(put),即将一组新的键值对存入表中;查找(get),即根据给定的键得到相应的值。                                ...

顺序链表的实现和链表查询的实现

顺序链表的创建和顺序链表的查询

C语言实现顺序表的插入、删除、查找、遍历等基本操作

C语言实现顺序表的插入、删除、查找、遍历等基本操作 /*编写完整的程序实现顺序的建立、查找、插入、删除等基本操作*/ #include #include #define LIST_INIT_SIZ...

leetcode66题 题解 翻译 C语言版 Python版

66. Plus One Given a non-negative number represented as an array of digits, plus one to the num...

java中集合的选择 初学者必备

java中集合的选择 初学者必备 关键字: http://www.java125.cn/article/javajc/2566.htm在java开发中如何选择合适遍历集合是初学者所必需掌握的,现在j...

笔试题:二元查找树转变成排序的双向链表

题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。    10   /    \  6     14 /  \    /   \ ...

【融博笔试题】查找单链表倒数第k个结点的值

继华赛之后,又一次倒在面试门前。基础不扎实就是不行啊! 下来做完这道题,顺便复习单链表。代码如下:   //-------------------------------------------...

笔试题-输入一个字符数组将这些字符串按顺序合并输出-指针数组-数组指针-函数指针-指针函数

#include #include #include void linkString(int count, char *chptr[]); /** 考察点就一个 指针数组 指针数组的意思是:...
  • JQ_AK47
  • JQ_AK47
  • 2016年11月14日 21:59
  • 350

笔试题 :查找两个字符串在一个字符串中出现的顺序

今天做某公司的在线笔试题,出现一个题目,意思是小明做车旅行时,途中醒了两次,每一次都看到了一些车站的颜色,用小写英文字母表示为两个字符串,现在同伴告诉小明整个过程中的所有车站的颜色排列,问是过去的途中...

2012.9腾讯笔试题: 顺序输出到栈, 栈中元素可任意时刻出栈. 求输出序列的可能数

问题描述: n个不相同元素顺序输入到 一个栈, 栈可以里的元素可在任意时刻出栈. 求出栈的可能序列数.  这是一个填空题, 求出当N等于5的情况的可能序列数. 很容易可以得到N等于2,3,4...
  • dinghim
  • dinghim
  • 2012年09月25日 20:45
  • 672
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:笔试题六:链表的顺序查找 并输出
举报原因:
原因补充:

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