一直递归一直爽。

此博客主要展示了用C++实现链表操作的代码,包括链表的初始化、合并、反转、输出指定结点等操作。代码中定义了链表节点结构体,通过不同函数实现各项功能,最后在主函数中进行链表初始化和操作调用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<iostream>
using namespace std;
struct node{
    int data;
    node* next;
};


//  合并排序链表  非递归算法
node*merr(node*phead1,node*phead2){
    if(phead1 == nullptr &&phead2== nullptr)
        return nullptr;
    else if(phead1 == nullptr)
        return phead2;
    else if(phead2 == nullptr)
        return phead1;
    else{

        node*head = nullptr;
        node*p1 = nullptr;
        while(phead1 != nullptr && phead2 != nullptr){
            if(phead1->data < phead2->data){
                if(head == nullptr)
                    head = p1 = phead1;
                else{
                    p1->next = phead1;
                    p1 =p1->next;
                }
                phead1 = phead1->next;
            }else{
                if(head ==nullptr)
                    head = p1 = phead2;
                else{
                    p1->next = phead2;
                    p1 = p1->next;
                }
                phead2 = phead2->next;
            }
        }
        if(phead1 == nullptr)
            p1->next = phead2;
        else
            p1->next = phead1;
    return head;
    }
}


//node* mer(node*phead,node*phead1){   //递归算法 合并两个链表
//    if(phead ==nullptr && phead1 ==nullptr)
//        return nullptr;
//    else if(phead1==nullptr)
//        return phead;
//    else if(phead ==nullptr)
//        return phead1;
//    else{
//        node* meer= nullptr;
//        if(phead->data < phead1->data){
//            meer= phead;
//            meer->next = mer(phead->next,phead1);
//        }else{
//            meer = phead1;
//            meer->next = mer(phead,phead1->next);
//        }
//        return meer;
//    }
//}

void prin(node*phead){
    node*p=phead;
    while(p->next!=nullptr){
        cout << p->data<<" ";
        p=p->next;
    }
    cout << p->data<<endl;
}


//node* reve(node*phead){  //把链表反转 并输出反转之后头结点
//    node* rev = nullptr;
//    node*pre = nullptr;
//    node*pnode= phead;
//    while(pnode != nullptr){
//        node* pnext = pnode->next;
//        if(pnode->next == nullptr)
//             rev = pnode;
//        pnode->next = pre;
//        pre = pnode;
//        pnode = pnext;
//    }
//    return rev;
//}
//node* put(node*phead,unsigned k){  //输出第K个结点
//    if(phead==nullptr || k==0)
//        return nullptr;
//        node*p1=phead;node*p2 =phead;
//    for(unsigned i=0;i<k-1;++i){
//        if(p2->next ==nullptr)
//            return nullptr;
//        else
//            p2= p2->next;
//    }
//    while(p2->next !=nullptr){
//        p1 = p1->next;
//        p2 = p2->next;
//    }
//    return p1;
//}

int main(){

    // 初始化链表
    node* p1,*p2,*head =nullptr;
    for(int i =1;i<8;i=i+2){
        p1= new node;
        p1->data = i;
        if(head==nullptr){
            head=p1;
            p2= p1;
        }else{
            p2->next = p1;
            p2 = p1;
        }
        p2->next= nullptr;
    }
    //初始化链表
       // prin(head);


    node* q1,*q2,*kead=nullptr;
    for(int i=2;i<9;i=i+2){
        q1=new node;
        q1->data = i;
        if(kead == nullptr){
            kead=q1;
            q2= q1;
        }else{
            q2->next= q1;
            q2= q1;
        }
        q2->next =nullptr;
    }
        //prin(kead);
    //输出链表

    p1 = mer(kead,head);
    prin(p1);

    return 0;

}

//#include<iostream>
//#include<stack>
//using namespace std;
//struct node{
//    int data ;
//    node* next;
//};
void del(node** phead,node*tbd){    o(1)时间删除链表
   if(!phead || !tbd)
       return;
   if(tbd->next != nullptr){
       node *p = new node;
       p = tbd->next;
       tbd->data = p->data;
       tbd->next = p->next;
       delete p;
       p=nullptr;
   }else if(tbd == * phead){
       delete *phead;
       *phead = nullptr;
   }else{
       node*pnode = *phead;
       while(pnode->next != tbd)
           pnode = pnode->next;
       pnode->next = nullptr;
       delete tbd;
       tbd =nullptr;
   }

}
void prin(node*phead){  //打印反转链表
   stack<node*> nodes;
   node *pnode = phead;
   while(pnode != nullptr)
   {
       nodes.push(pnode);
       pnode = pnode-> next;
   }
   while(!nodes.empty()){
       pnode = nodes.top();
       cout << pnode->data<<endl;
       nodes.pop();
   }
}
//int main(){
//    node*head=nullptr,*p1,*p2;
//    for(int i = 0; i< 5;++i){
//        p1 = new node;
//        (*p1).data = i;
//        if(head == nullptr){
//            p2= p1;
//            head= p1;
//        }else{
//            p2->next=p1;
//            p2 = p1;
//        }
//    }
//    p2->next = nullptr;
//    node* pp =head->next->next->next->next;
//    //prin(head);
//    del(&head,pp);
//
//    //输出链表
//    p1 =  head;
//    while(p1->next!=nullptr){
//        cout <<p1->data;
//        p1= p1->next;
//    }
//        cout << p1->data;
//    return 0;
//
//}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值