2013年百度实习生面试 编程题之--单链表的反转

单链表的反转,虽然想起来容易,但是要实现一个没有错误的可运行代码却没那么简单。代码如下

#include<stdio.h>
#include<stdlib.h>

typedef struct{
	int value;
	struct node_t* next;
}node_t;
node_t* head;
void buildLink(int);
void printLink();
void buildLink(int n){
	int i=0;
	node_t* tmp;
	node_t* tmpnode;
	if(n>=1){
		head = malloc(sizeof(node_t));
		head->value = rand()%99;
		tmp = head;
		for(i=1;i<n;i++){
			tmpnode = malloc(sizeof(node_t));
			tmpnode->value = rand()%99;
//			printf("value of node %d\n",i);
//			scanf("%d",&tmpnode->value);
			tmp->next = tmpnode;
			tmp = tmp->next;
		}
	}
}
void printLink(){
	int i =0;
	node_t* first = head;
	while(first!=NULL){
		printf("node %d 's value is %d\n ",i,first->value);
		first=first->next;
		i++;
	}
}
void revirse(){
	node_t* first = head;
	node_t* tmp;
	node_t* afterTmp;
	if(head==NULL)
		return;
	tmp = first->next;
	if(tmp==NULL)
		return;
	afterTmp = tmp->next;
	while(afterTmp!=NULL){
		tmp->next = first;
		first = tmp;
		tmp = afterTmp;
		afterTmp = afterTmp->next;
	}
	tmp->next = first;
	head->next =NULL;
	head = tmp;
}
int main(void){
	int i =0;
	printf("input node number\n");
	scanf("%d",&i);
	buildLink(i);
	printf("before revirse\n");
	printLink();
	revirse();
	printf("after revirse\n");
	printLink();
	return 1;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值