链表的倒序查找

我所使用的方法在输入的时候是使用一个栈存储所有的数据,利用的是其先进后出的数据结构。
当然,用一个数组也是可以的= =,而且我觉得还可以保存数据,而用stack的话操作比较麻烦。

#include <cstdio>
#include <iostream>
#include <stack>
#include <stdlib.h>
#define LEN sizeof(Node)
using namespace std;

struct Node
{
	int data;
	Node *next;
};

stack<int> s;

int tot = 0;

Node *Node_Creat()
{
	Node *head;
	head = (Node *)malloc(LEN);
	if(head == NULL)
	{
		printf("Overflow\n");
		exit(1);
	}
	
	head = NULL;
	
	Node *p1,*p2;
	p1 = p2 = (Node *)malloc(LEN);
	if(p1 == NULL || p2 == NULL)
	{
		printf("Overflow\n");
		exit(1);
	}
	
	scanf("%d",&p1 -> data);
	while(p1 -> data >= 0)
	{
		tot++;
		
		s.push(p1 -> data);
		
		if(head == NULL)
		{
			head = p1;
		}
		else
		{
			p2 -> next = p1;
		}
		
		p2 = p1;
		
		p1 = (Node *)malloc(LEN);
		if(p1 == NULL)
		{
			printf("Overflow\n");
			exit(1);
		}
		
		scanf("%d",&p1 -> data);
	}
	p2 -> next = NULL;
	
	return head;
}

void Node_Print(Node *head)
{
	if(head == NULL)
	{
		printf("EMPTY!\n");
		return ;
	}
	
	Node *p = head;
	while(p != NULL)
	{
		printf("%d ",p -> data);
		p = p -> next;
	}
	printf("\n");
}

void Node_ReverseFound(int num)
{
	int i;
	int data = 0;
	
	if(num > tot)
	{
	    printf("NOT FOUND\n");	
	}
	
	for(i = 1; i < num; i++)
	{
		s.pop();
	}
	
	printf("%d\n",s.top());
}

int main()
{
	Node *head;
	head = Node_Creat();
	
	Node_Print(head);
	
	int num;
	scanf("%d",&num);
	printf("Reverse Found num: %d\n",num);
	
	Node_ReverseFound(num);
	
	return 0;
}
posted @ 2016-05-18 22:45  Wasdns  阅读(331)  评论(0编辑  收藏  举报