单链表基本操作
#include <cstdlib> #include <iostream> #include <string.h> #include <conio.h> #include <stdio.h> /*c++实现简单的单链表操作*/ 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) { printf("\nplease input the data:"); scanf("%d",&x); if(x!=0) { s=(node *)malloc(sizeof(node)); s->data=x; printf("\n%d",s->data); p->next=s; p=s; } else cycle=0; } head=head->next; p->next=NULL; printf("\n yyy %d",head->data); 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(head==p1) { p0->next=p1; head =0; } else { p2->next=p0; p0->next=p1; } } else { p1->next=p0; p0->next=NULL; } return head; } //单链表测长 int length(node *head) { int n=0; node *p; p=head; while(p!=NULL) { p=p->next; n++; } return n; } //单链表删除某个元素 node *delNode(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 printf("\n%d could not been found!",num); return head; } //单链表逆 node *reverse(node *head) { node *p1,*p2,*p3; if(head==NULL||head->next==NULL) return head; p1=head,p2=head->next; while(p2) { p3=p2->next; p2->next=p1; p1=p2; p2=p3; } head->next=NULL; head=p1; return head; } //打印单链表 void print(node *head) { node *p; int n; n=length(head); printf("\nNow,These %d record are:\n",n); p=head; if(head!=NULL) while(p!=NULL) { printf("\n uuu %d ",p->data); p=p->next; } } int main(int argc, char *argv[]) { node *list=creat(); print(list); list = delNode(list,2); print(list); int x; cin>>x; list=insert(list,x); print(list); list=reverse(list); print(list); system("PAUSE"); return EXIT_SUCCESS; }
Keep it simple!