C语言——链表总结2

一、链表冒泡排序

  • 交换指针的冒泡排序
    先来看看图示,该图只演示了一次交换。
    这里写图片描述
Node* Sort(Node* pHead)
{
Node *p,*q;
    int n,i,j;
    p=pHead;
    while(p)  
    {
        n++;
        p=p->next;//统计节点个数 
    }
      for(i=0;i<n-2;i++)  
      {
        p=pHead;   
        q=p->next;
        for(j=0;j<n-i-2;j++) 
        {
          if(q->date>(q->next->date))  
          {
            p->next=q->next;
            q->next=q->next->next;
            p->next->next=q;
          }
          p=p->next;//p后移
          q=p->next;//更新q位置
        } 
      }

    return pHead;
}
  • 交换数据的冒泡排序
    这种方法与普通的数组冒泡排序没有什么区别,在这里就不作展示了。

二、删除a链中b链出现的节点

  • 思路:让a链第一个元素和b链中的元素比较若有重复删除,若没有更新a链标记位置,再次遍历b链表,如此重复直到a链尾。
Node *Delete(Node *ah,Node *bh)
{
    Node *a,*b,*c,*t;
    a=ah->next;
    c=ah;
    while(a!=NULL)
    {
        b=bh->next;
        while(b!=NULL)
        {
            if(a->date==b->date)
            {
                t=a; //标记重复位置
                c->next=a->next;//相当于一次删除操作
                a=c;
                free(t);    
            }
            b=b->next;//遍历b链表
        }
        c=a;
        a=a->next;//更新a的位置
    }
    return ah;      
}

猜你喜欢

转载自blog.csdn.net/gaoshanyangzhi_1999/article/details/80639352