zoukankan      html  css  js  c++  java
  • 链表的插入、删除

    结构体:

    1 typedef struct Student{
    2     int m_val;
    3     struct Student* m_next;
    4 }NODE,*pNODE;

    链表的插入:

     1 //尾部插入
     2 void linkInitTail(pNODE* pphead)
     3 {
     4     int val;
     5     pNODE pNew,pTail;
     6     while(scanf("%d",&val) == 1)
     7     {
     8         pNew = (pNODE)calloc(1,sizeof(NODE));
     9         pNew->m_val = val;
    10         if(*pphead == NULL)
    11         {
    12             *pphead = pNew;
    13             pTail = pNew;
    14         }
    15         else
    16         {
    17             pTail->m_next = pNew;
    18             pTail = pNew;
    19         }
    20     }
    21     pTail = NULL;
    22 }
    23 
    24 //头部插入,不需记录尾部结点
    25 void linkInitHead(pNODE* pphead)
    26 {
    27     pNODE pNew;
    28     int val;
    29     while(scanf("%d",&val) == 1)
    30     {
    31         pNew = (pNODE)calloc(1,sizeof(NODE));
    32         pNew->m_val = val;
    33         pNew->m_next = *pphead;
    34         *pphead = pNew;
    35     }
    36 }
    37 //有序插入
    38 void linkInitOrder(pNODE* pphead)
    39 {
    40     pNODE pNew,pPrevious,pCurrent;
    41     int val;
    42     while(scanf("%d",&val) == 1)
    43     {
    44         pNew = (pNODE)calloc(1,sizeof(NODE));
    45         pNew->m_val = val;
    46 
    47         pCurrent = *pphead;
    48         pPrevious = NULL;
    49 
    50         while(pCurrent && pCurrent->m_val < pNew->m_val)
    51         {
    52             pPrevious = pCurrent;
    53             pCurrent = pCurrent->m_next;
    54         }
    55         if(pPrevious == NULL)
    56         {
    57             pNew->m_next = *pphead;
    58             *pphead = pNew;
    59         }
    60         else
    61         {
    62             pNew->m_next = pCurrent;
    63             pPrevious->m_next = pNew;
    64         }
    65     }
    66 }

    链表的删除:

     1 void linkDelete(pNODE* pphead, int value)
     2 {
     3     pNODE pPrevious = NULL, pCurrent = *pphead;
     4     while(pCurrent && pCurrent->m_val != value)
     5     {
     6         pPrevious = pCurrent;
     7         pCurrent = pCurrent->m_next;
     8     }
     9     if(pCurrent == NULL)
    10         printf("Not exist!");
    11     else
    12     {
    13         if(pPrevious == NULL)//删去头结点
    14         {
    15             *pphead = pCurrent->m_next;
    16             free(pCurrent);
    17         }
    18         else
    19         {
    20             pPrevious->m_next = pCurrent->m_next;
    21             free(pCurrent);
    22         }
    23     }
    24 
    25 }
  • 相关阅读:
    直接选择排序(C++模版技术实现)
    求素数
    快速排序(C++模版技术实现)
    堆排序(C++模版技术实现)
    简单链式二叉树(C++模版技术实现)
    归并排序(C++模版技术实现)
    求斐波那契数列的两种解法
    C++中改变setw(n)的对齐方式
    C中的64位整型
    Windows版GCC之TDMGCC 4.5.2
  • 原文地址:https://www.cnblogs.com/cpsmile/p/4430266.html
Copyright © 2011-2022 走看看