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 traverList(NODE * head) 21 { 22 head = head->next; 23 while(head) 24 { 25 printf("%d\n",head->data); 26 head = head->next; 27 } 28 29 return ; 30 } 31 //求链表长度 32 int lenList(NODE *head) 33 { 34 int len = 0; 35 head = head->next; 36 while(head) 37 { 38 len++; 39 head = head->next; 40 } 41 42 return len; 43 } 44 //查找结点 45 NODE * lookList(NODE *head,int NodeData) 46 { 47 while(head) 48 { 49 if(head->data == NodeData) 50 break; 51 else 52 head = head->next; 53 } 54 return head; 55 } 56 //删除结点 57 void deleteNode(NODE *head,NODE *pointer) 58 { 59 while(head->next != pointer) 60 { 61 head = head->next; 62 } 63 head->next = pointer->next; 64 } 65 //打断链表 66 NODE * breakList(NODE * head) 67 { 68 NODE *p = head->next; 69 head->next = NULL; 70 71 return p; 72 } 73 int main(void) 74 { 75 NODE * head = createList(); 76 //插入节点 77 int i; 78 printf("请输入结点数据\n"); 79 scanf("%d",&i); 80 while(i) 81 { 82 NODE * sur = (NODE * )malloc(sizeof(NODE)); 83 sur->data = i; 84 85 sur->next = head->next; 86 head->next = sur; 87 88 scanf("%d",&i); 89 } 90 traverList(head); 91 int len = lenList(head); 92 printf("链表长度len = %d\n",len); 93 printf("---------查找3这个结点---------\n"); 94 NODE * pointer = lookList(head,3); 95 if(pointer == NULL) 96 { 97 printf("没有找到3这个结点\n"); 98 } 99 else 100 { 101 printf("3这个结点的地址为:%p\n",pointer); 102 deleteNode(head,pointer); 103 } 104 traverList(head); 105 //链表反转 106 printf("---------链表反转----------\n"); 107 NODE *p = breakList(head);//获取新链表 108 //将新链表插入到空链表中去。 109 while(p) 110 { 111 NODE *q = p->next; 112 p->next = head->next; 113 head->next = p; 114 115 p = q; 116 } 117 traverList(head); 118 119 return 0; 120 }
链表:创建空链表,插入节点,遍历,求长度,查找,删除,反转
猜你喜欢
转载自www.cnblogs.com/wangchaomahan/p/9724828.html
今日推荐
周排行