面试题 -- 从尾到头 反向打印链表

以下代码在vs2010 测试通过:

/**
*解题思路:
*	方法一:从头遍历链表,把每次遍历得到的值存在一个栈中,然后在输出栈中的数字
*	方法二:用递归的方法遍历链表,每次都先输出该节点的后一个节点
*		(注)用递归的方法,如果链表很大,递归的层很深,可能会出现内存溢出,所以更好的方法是使用栈
*/
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#define TRUE 1
#define FALSE 0 

typedef struct ListNode{
	int value;
	ListNode* next;
}Node ;

int createList(Node** list,int length);
void reverseOrderList(Node* list);
int _tmain(int argc, _TCHAR* argv[]){
	Node* list = NULL;
	Node* plist;
	int result ;
	result = createList(&list,8);
	printf("原链表的顺序是:\n");
	plist = list;
	if(result == 1){
		while(plist->next != NULL){
			plist = plist->next;
			printf("%d\t",plist->value);
			
		}
	}
	printf("\n反向链表的顺序是:\n");
	Node* reverseList;
	reverseList = list->next; //去掉头节点
	reverseOrderList(reverseList);
	system("pause");
	return TRUE;
}
//创建一个单链表
int createList(Node **list,int length){
	Node* rootp;
	Node* newNode;

	if(*list == NULL)
	*list = (Node*)malloc(sizeof(Node));
	(*list)->value = length;
	(*list)->next = NULL;

	rootp = *list;
	while(length > 0){
		newNode = (Node*)malloc(sizeof(Node));
		if(newNode == NULL){
			return FALSE;
		}
		newNode->value = length;

		rootp->next = newNode;
		rootp = newNode;
		length--;
	}
	newNode->next = NULL;
	return TRUE;
}
/*
* 用栈存储数字,实现反向链表的输出
*/
int reverseOrderList(Node* pHead){
	//建立一个空的栈
	sqStack* s = NULL;
	s = (sqStack *)malloc(sizeof(sqStack));
	s->top = -1;
	//入栈
	while(pHead != NULL){
		s->top++;
		s->data[s->top] = pHead->value;
		pHead = pHead->next;
	}
	//出栈
	while(s->top != -1){
		printf("%d\t",s->data[s->top]);
		s->top-- ;
	}
	return TRUE;
}  
*/
/*
*用递归的方法,反向输出链表
*/
void reverseOrderList(Node* list){

	if(list != NULL){
		if(list->next != NULL){
			reverseOrderList(list->next);
		}
	}
	
	printf("%d\t",list->value);
} 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值