#include#include"malloc.h" // 单链表结点类型 typedef struct Node { int data; struct Node *next; } Node,*LinkList; // typedef简化代码编写,将这种结构体重命名为Node,将这种结构体指针变量重命名为LinkList // 单链表L中p指针所指向的结点后插入新节点 void InsertList(LinkList L, Node *p, int e) { Node *pNew; //定义Node指针类型变量pNew pNew = (Node *)malloc(sizeof(Node)); //动态分配Node数据类型大小的空间,并转换为Node类型地址,由pNew指向该空间的首地址 pNew->data = e; // 单链表插入操作 pNew->next = p->next; p->next = pNew; } // 删除p指针所指向的结点 void DelNode(LinkList L, Node *p) { Node *pre; //用pre指针指向删除节点的前一个结点 pre = L->next; //找到pre位置 while(pre->next != p) { pre = pre->next; } // 删除结点p pre->next = p->next; free(p); printf("删除成功!n"); } // 查找单链表L中是否有值为e的结点 void SearchNode(LinkList L, int e) { Node *p; int count = 1; p = L -> next; while(p) { if(p -> data != e) { count++; p = p ->next; } else break; } if(p == NULL) printf("该链表中无值为%d的结点n", e); else printf("查找成功,值为%d的结点是第%d个n", e,count); } // 获取单链表L的长度 int GetLength(LinkList L) { int count = 0; Node *p; p = L -> next; while(p) { count++; p = p -> next; } return count; } //头插法建立单链表L(逆向建立单链表) LinkList HeadInsertCreat() { LinkList L; // 定义表头指针L Node *p; //新进结点指针p int x; //初始化单链表 L = (LinkList)malloc(sizeof(Node)); L -> next = NULL; scanf("%d", &x); //设置输入-1为结束标志,重复执行插入操作 while(x != -1) { p = (Node *)malloc(sizeof(Node)); p -> data = x; p->next = L->next; L->next = p; scanf("%d", &x); } return L; } //尾插法建立单链表(正向建立单链表) LinkList RearInsertCreat() { LinkList L; Node *p, *rear; int x; L = (LinkList)malloc(sizeof(LinkList)); L -> next = NULL; rear = L; scanf("%d", &x); while(x != -1) { p = (Node *)malloc(sizeof(Node)); p->data = x; p->next = rear->next; rear->next = p; //rear指针后移,保证始终指向最后一个结点 rear = p; scanf("%d", &x); } rear->next=NULL; return L; } //遍历单链表输出单链表的内容 void ViewList(LinkList L, Node *p) { p = L->next; while(p) { printf("%-4d",p->data); p = p->next; } printf("n"); } main() { LinkList L; Node *p; L = HeadInsertCreat(); //头插法建立单链表 //L = RearInsertCreat(); // 尾插法建立单链表 printf("该单链表的长度为:%dn", GetLength(L)); SearchNode(L,6); // 遍历单链表删除值为4的结点 p = L->next; while(p->data != 4) { p = p->next; } DelNode(L,p); ViewList(L,p); // 插入值为9的结点 p = L->next; InsertList(L, p, 9); ViewList(L,p); }



