#include "stdafx.h"#include "stdio.h"#include "stdlib.h"typedef struct linknode{ int data; struct linknode *next;}node;node *create(){ 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 head->data %d",head->data); return(head);}void print(node *head){ node *p; p = head; while(p != NULL){ printf("\nprint... %d",p->data); p = p->next; }}node *reverse(node *head){ node *prev, *pcur,*pnext; if(head == NULL || head->next ==NULL) return head; prev = head, pcur = prev->next;//有2个或2个以上才反转 while(pcur){ pnext = pcur->next; pcur->next = prev; prev = pcur; pcur = pnext; } head->next = NULL; head = prev; 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 = p0; } else{//中间插入 p2->next = p0; p0->next = p1; } } else{//在尾部插入 p1->next = p0; p0->next = NULL; } return head;}node *del(node *head,int num){ node *pcur,*prev; pcur = prev = head ; while(pcur->data != num && pcur->next != NULL){ prev = pcur; pcur = pcur->next; } if(pcur->data == num){//找到了合适的值 if(pcur == head){//要删除的节点是头节点 head = head->next; free(pcur); return head; }else{ prev->next = pcur->next; free(pcur); return head; } }else{//没找到 return head; }}int main(int argc, char* argv[]){ node *head; head = create(); print(head); head = reverse(head); printf("after reverse\n"); print(head); head = insert(head,2); print(head); head = del(head,2); print(head); printf("Hello World!\n"); return 0;}
相关资源:C语言链表综合练习题