不多说,直接贴测试通过的代码(C++)。。。
// singlelist.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream>
// singlelist.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include <iostream> #include <stdio.h> #include <string.h> #include <conio.h> using namespace std; typedef struct student { int data; struct student *next; }node; node *creat() //建立一个单链表 { node *head,*p,*s; int x,cycle=1; head=(node*)malloc(sizeof(node)); p=head; while(cycle) { cout<<"Please input the data:"; cin>>x; if (x!=0) { s=(node*)malloc(sizeof(node)); s->data=x; //cout<<s->data; p->next=s; p=s; } else cycle=0; } head=head->next; p->next=NULL; cout<<head->data; return head; } int length(node *head) //测试单链表的长度 { int n=0; node *p; p=head; while(p!=NULL) { p=p->next; n++; } return n; } void print(node *head) //打印单链表 { node *p; int n; n=length(head); cout<<"These"<<n<<"records are: "<<endl; p=head; while(p!=NULL) { cout<<p->data; p=p->next; } cout<<endl; } node *del(node *head,int num) //单链表删除节点 { node *p1,*p2; p1=head; while(num!=p1->data&&p1->next!=NULL) { p2=p1; p1=p1->next; } if (num==p1->data) { if (p1==head) { head=p1->next; free(p1); } else p2->next=p1->next; } else cout<<num<<"could not been found!"<<endl; return head; } node *insert(node *head,int num) //单链表插入节点 { node *p0,*p1,*p2; p1=head; p0=(node *)malloc(sizeof(node)); p0->data=num; while(p0->data>p1->data&&p1->next!=NULL) { p2=p1; p1=p1->next; } if (p0->data<=p1->data) { if (p1==head) //插入到链表头 { p0->next=p1; head=p0; } else{ //插入到中间 p2->next=p0; p0->next=p1; } } else //插入到尾节点 { p1->next=p0; p0->next=NULL; } return head; } node *sort(node *head) //单链表的排序 { node *p; int n; int temp; n=length(head); if (head==NULL||head->next==NULL) { return head; } p=head; for (int i=1;i<n;++i) { p=head; for(int j=0;j<n-i;++j) { if (p->data>p->next->data) { temp=p->data; p->data=p->next->data; p->next->data=temp; } p=p->next; } } return head; } node *reverse(node *head) //单链表的逆转 { node *p1,*p2,*p3; if (head==NULL||head->next==NULL) { return head; } p1=head; p2=p1->next; while(p2) { p3=p2->next; p2->next=p1; p1=p2; p2=p3; } head->next=NULL; head=p1; return head; } int _tmain(int argc, _TCHAR* argv[]) { node *head; int del_num,insert_num; head=creat(); cout<<"长度为:"<<length(head)<<endl; print(head); head=sort(head); print(head); cout<<"输入要插入的数字:"; cin>>insert_num; head=insert(head,insert_num); print(head); cout<<"请输入要删除的数字:"; cin>>del_num; head=del(head, del_num); print(head); head=reverse(head); print(head); return 0; }