链表:创建空链表,插入节点,遍历,求长度,查找,删除,反转

  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