今天翻了云风大大的微博,看到他说他给应届生出了一道笔试的编程题,结果7 8 个人没有一个能正确地写出来。于是我就试着写了下,不过发现逻辑很简单呀。
//保存后继节点
//更改当前结点的next(指向前一个)
//设当前结点为前驱节点
//设后继节点为当前结点
//loop
#include <stdio.h>
#include <stdlib.h>
struct Node;
struct Node
{
int data;
struct Node * next;
};
struct Node *pn=NULL;
struct Node* createList(struct Node* p){
//first
p->data=1;
p->next=NULL;
struct Node* temp=NULL,*sa=p;
for(int i=2;i<=5;i++){
temp=(struct Node*)malloc(sizeof(struct Node));
temp->data=i;
temp->next=NULL;
p->next=temp;
p=p->next;
}
return sa;
}
void print(struct Node *p){
while(p){
printf("%d\t",p->data);
p=p->next;
}
}
struct Node* reverse(struct Node * p){
struct Node * temp=NULL;
struct Node * prev=NULL;
while(p!=NULL){
temp=p->next;
p->next=prev;
prev=p;
p=temp;
}
return prev;
}
int main(void){
pn=(struct Node*)malloc(sizeof(struct Node));
pn=createList(pn);
print(pn);
printf("\n");
pn=reverse(pn);
print(pn);
}
不过,话说回来了。我就是能写出来这些,也没人给我面试机会,就因为我的简历烂。