标签:
#include <stdio.h> #include <stdlib.h> //函数malloc需要的头文件 typedef struct student * PNode; typedef struct student //设计链表前最重要的是先想好数据结构 { int data; struct student *next; }Node; PNode create() { PNode head,p; int x=0; char flag; head=(PNode)malloc(sizeof(Node)); p=head; if(head==NULL) return NULL; printf("请输入节点的值:"); scanf("%d",&x); while(1) { p->data=x; printf("是否继续添加链表:Y/N\n"); scanf(" %c",&flag); //注意,在%c前面有个空格,是为了防止上一个语句的回车符,因为scanf会把回车符当做一个字符,而scanf只接收一个字符 if(‘N‘==flag) break; p->next=(PNode)malloc(sizeof(Node)); //为下一个节点申请地址 p=p->next; printf("请输入节点的值:"); scanf("%d",&x); } p->next=NULL; return head; } void print(PNode link) { PNode head=link; if(head==NULL) return; while(head!=NULL) { printf("%d ",head->data); head=head->next; } printf("\n"); } int length(PNode link) { int count=0; PNode head=link; while(head!=NULL) { ++count; head=head->next; } return count; } PNode del(PNode link,int num) //删除分两种情况,一种是删除第一个节点,另外一种是删除中间节点。 { PNode head,p,temp; head=link; if(head->data==num) //删除第一个节点 { head=head->next; return head; } p=head; while(p->next!=NULL) { if(p->next->data==num) //删除第其他节点 { temp=p->next->next; free(p->next); p->next=temp; return head; } p=p->next; } printf("没有这样的节点"); return link; } int main(void) { PNode link; int len;//链表长度 int num;//要删除的值 link=create();//创建链表 printf("打印删除前的链表\n"); print(link); printf("请输入要删除的链表的值:"); scanf("%d",&num); link=del(link,num); printf("打印删除后链表的值\n"); print(link); len=length(link); printf("链表的长度为%d\n",len); return 0; }
标签:
原文地址:http://www.cnblogs.com/longzhongren/p/4413826.html