头插法链表的基本操作:创建空链表,插入结点,遍历链表,求链表长度,查找结点,删除结点
Posted wangchaomahan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了头插法链表的基本操作:创建空链表,插入结点,遍历链表,求链表长度,查找结点,删除结点相关的知识,希望对你有一定的参考价值。
1 #include <stdio.h> 2 #include <stdlib.h> 3 /* 4 头插法链表的基本操作:创建空链表,插入节点,遍历输出节点数据,求链表长度,查找结点,删除结点。 5 */ 6 typedef struct node 7 { 8 int data; 9 struct node * next; 10 }NODE; 11 //创建空链表 12 NODE * createList() 13 { 14 NODE * head = (NODE *)malloc(sizeof(NODE)); 15 head->next = NULL; 16 17 return head; 18 } 19 //头插法插入新节点 20 void insertNode(NODE * head,int insertData) 21 { 22 NODE * sur = (NODE *)malloc(sizeof(NODE)); 23 sur->data = insertData; 24 25 sur->next = head->next; 26 head->next = sur; 27 28 return; 29 } 30 //遍历输出链表结点数据 31 void traverList(NODE * head) 32 { 33 head = head->next; 34 while(head) 35 { 36 printf("%d ",head->data); 37 head = head->next; 38 } 39 40 return; 41 } 42 //求链表的长度 43 int lenNodeList(NODE * head) 44 { 45 int len = 0; 46 head = head->next; 47 while(head) 48 { 49 len++; 50 head = head->next; 51 } 52 53 return len; 54 } 55 //查找结点 56 NODE * lookNodeList(NODE *head,int n) 57 { 58 head = head->next; 59 while(head) 60 { 61 if(head->data == n) 62 break; 63 else 64 head = head->next; 65 } 66 return head; 67 } 68 //删除结点 69 void deleteNode(NODE * head,NODE * add) 70 { 71 while(head->next !=add)//找前区 72 { 73 head = head->next; 74 } 75 head->next = add->next; 76 77 free(add); 78 } 79 int main(void) 80 { 81 NODE * head = createList(); 82 83 for(int i = 0;i<100;i++) 84 insertNode(head,i); 85 86 traverList(head); 87 int len = lenNodeList(head); 88 printf("链表长度为:%d ",len); 89 printf("查找数值为33的结点地址 "); 90 NODE * add = lookNodeList(head,33); 91 if(add == NULL) 92 { 93 printf("没有找到 "); 94 } 95 else 96 { 97 printf("%d的地址为:%p ",add->data,add); 98 printf("删除33这个结点 "); 99 deleteNode(head,add); 100 } 101 traverList(head); 102 103 return 0; 104 }
以上是关于头插法链表的基本操作:创建空链表,插入结点,遍历链表,求链表长度,查找结点,删除结点的主要内容,如果未能解决你的问题,请参考以下文章