#include <iostream>
#include<stdio.h>
#include<string.h>
#include<vector>
#include<malloc.h>
using namespace std;
typedef struct student
{
int data;
struct student *next;
}Node;
//链表的创建
Node *create()
{
int x,cycle=1;
Node *p1;
Node *list=(Node *)malloc(sizeof(Node));
p1=list;
while(cycle)
{
printf("\ninput data :");
scanf("%d",&x);
if(x!=0)
{
Node *p2=(Node*)malloc(sizeof(Node));
p2->data=x;
p1->next=p2;
p1=p2;
}
else cycle=0;
}
p1->next=NULL;
return list;
}
//打印链表
int printf(Node *list)
{
Node *p1=list->next;
if(p1==NULL)
return 1;
printf("the list is:");
while(p1!=NULL)
{
printf("%d ",p1->data);
p1=p1->next;
}
return 0;
}
//链表的排序
Node *Sort_List(Node *head)
{
Node *first; /*为原链表剩下用于直接插入排序的节点头指针*/
Node *t; /*临时指针变量:插入节点*/
Node *p; /*临时指针变量*/
Node *q; /*临时指针变量*/
if(head->next==NULL||head->next->next==NULL)
{
return head;
}
first = head->next->next;
head->next->next = NULL;
while (first != NULL) /*遍历剩下无序的链表*/
{
t=first;
first=first->next;
p=head;
q=head->next;
while(q!=NULL&&(t->data>q->data))
{
p=q;
q=q->next;
}
p->next=t;
t->next=q;
}
return head;
}
//链表的反转
Node *Reverse_List(Node * const head)
{
if(head->next==NULL||head->next->next==NULL)
{
return head;
}
Node *t,*p,*m;
t=head->next;
p=t->next;
t->next=NULL;
while(p!=NULL)
{
m=p;
p=p->next;
m->next=t;
t=m;
}
head->next=t;
return head;
}
int main()
{
Node *students = create();
//Sort_List(students);
Reverse_List(students);
printf(students);
}
转载于:https://my.oschina.net/bovinitwo/blog/648604