链表的合并与取中间值

1.链表合并


int main()
{
    node *phead1 = NULL;//头结点不分配内存
    phead1 = addback(phead1, 2);    //addback是在尾部添加节点,也就是将2插入怕head1链表的尾部。
    phead1 = addback(phead1, 4);
    phead1 = addback(phead1, 6);
    phead1 = addback(phead1, 8);
    phead1 = addback(phead1, 10);
    phead1 = addback(phead1, 12);
    phead1 = addback(phead1, 14);
    node *phead2 = NULL;//头结点不分配内存
    phead2 = addback(phead2, 1);
    phead2 = addback(phead2, 3);
    phead2 = addback(phead2, 5);
    phead2 = addback(phead2, 7);
    phead2 = addback(phead2, 9);

    node *phead = NULL;//123456
    node *p1 = phead1;
    node *p2 = phead2;
    //1  3  5 7  9  
    //2  4  6  8 10
    
    while (p2!=NULL ||p1!=NULL)
    {
        if (p1!=NULL && p2!=NULL) //对比两个数据
        {
            if (p1->data < p2->data)
            {
                phead = addback(phead, p1->data);
                p1 = p1->pNext;
            }
            else
            {
                phead = addback(phead, p2->data);
                p2 = p2->pNext;
            }
        }
        else
        {
            while (p1!=NULL)//尾部添加
            {
                phead = addback(phead, p1->data);
                p1 = p1->pNext;
            }

            while (p2 != NULL)//尾部添加
            {
                phead = addback(phead, p2->data);
                p2 = p2->pNext;
            }
        }            
    }
    
    system("pause");
}

2.链表取中间值

node *  getmid(node *phead)
{
    if (phead==NULL ||phead->pNext==NULL)
    {
        return phead;
    }
    else
    {
        node *p1=phead;
        node *p2=phead;

        while (p2->pNext!=NULL)//  //0->data
        {
            p1 = p1->pNext;//前进一步
            p2 = p2->pNext;//2步

            if (p2->pNext!=NULL)//提前结束
            {
                p2 = p2->pNext;
            }

        }
        return p1;
    }
}

原文地址:https://www.cnblogs.com/sjxbg/p/5752135.html