这学期上数据结构,把书上的代码都自己敲一遍,慢慢更新.
1.单链表的逆序
#include<stdio.h>
#include<stdlib.h>
int len=0;
typedef struct Linklist{
int data;
Linklist *next;
}node;
node *create(){
node *head,*p1,*p2;
head=(node*)malloc(sizeof(node));
head->next=NULL;
p1=(node*)malloc(sizeof(node));
printf("please input data:");
scanf("%d",&p1->data);
while(p1->data){
len++;
if(len==1){
head->next=p1;
p2=p1;
}
else{
p2->next=p1;
p2=p1;
}
p1=(node*)malloc(sizeof(node));
printf("please input data:");
scanf("%d",&p1->data);
}
free(p1);
//普通的单链表
p2->next=NULL;
/*如果是循环链表
p2->next=head->next;
*/
return head;
}
void disp(node *head){
node *p=head->next;
printf("len=%d disp:\n",len);
while(p){
printf("%d ",p->data);
p=p->next;
}
}
void reverse(node *head){
node *p,*q;
p=head->next;
int f=1;
while(p){
q=p;
p=p->next;
if(f){
q->next=NULL;
f=0;
}
else{
q->next=head->next;
}
head->next=q;
}
}
int main(){
node *head=create();
disp(head);
//链表逆序
printf("\n");
reverse(head);
disp(head);
return 0;
}