zoukankan      html  css  js  c++  java
  • 链表:创建空链表,插入节点,遍历,求长度,查找,删除,反转

      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
    ",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("请输入结点数据
    ");
     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
    ",len);
     93     printf("---------查找3这个结点---------
    ");
     94     NODE * pointer = lookList(head,3);
     95     if(pointer == NULL)
     96     {
     97         printf("没有找到3这个结点
    ");
     98     }
     99     else
    100     {
    101         printf("3这个结点的地址为:%p
    ",pointer);
    102         deleteNode(head,pointer);
    103     }
    104     traverList(head);
    105     //链表反转
    106     printf("---------链表反转----------
    ");
    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 }
  • 相关阅读:
    数组循环的各种方法的区别
    数组里面findIndex和indexOf的区别
    选择器的绑定
    把dialog对话框设置成组件的形式
    css font-family字体及各大主流网站对比
    记一下公司的备注怎么写
    可删
    瑞萨电子:嵌入式终端与人工智能融合改变工业格局
    linux有什么作用
    Linux有哪些特点
  • 原文地址:https://www.cnblogs.com/wangchaomahan/p/9724828.html
Copyright © 2011-2022 走看看