zoukankan      html  css  js  c++  java
  • 交换链表的奇数节点和偶数节点

    #ifndef LINKLIST_H_
    #define LINKLIST_H_

    struct Node
    {
        Node* ptr_;
        int data_;

        Node():ptr_(0), data_(0) {}
        Node(int i):ptr_(0), data_(i) {}
    };   

    class LinkList
    {
    public:
        LinkList();
        ~LinkList();

        // 在链表的最后一个节点之后添加节点node
        void add_node(Node* node);

        // 顺序打印链表节点数据
        void disp();

        // 交换链表的奇数节点和偶数节点
        void swap_odd_even();

    private:
        // 清空链表
        void clr_list();

        // 表头指针
        Node* first_;
       
        // 表尾指针
        Node* last_;
    };

    #endif

    #include "LinkList.h"
    #include "iostream"
    using namespace std;

    LinkList::LinkList()
    {
        first_ = new Node;
        last_ = first_;
    }

    LinkList::~LinkList()
    {
        clr_list();
    }

    void LinkList::add_node(Node* node)
    {
        last_->ptr_ = node;
        last_ = node;
    }

    void LinkList::clr_list()
    {
        Node* tmp;
        while(first_->ptr_ != 0)
        {
            tmp = first_->ptr_;
            first_->ptr_ = tmp->ptr_;
            delete tmp;
        }
    }

    void LinkList::disp()
    {
        Node* cur = first_->ptr_;
        while(cur != 0)
        {
            cout<<cur->data_<<endl;
            cur = cur->ptr_;
        }
    }

    void LinkList::swap_odd_even()
    {
        Node* odd = first_->ptr_; // 初始奇数节点
        Node* even = odd->ptr_;   // 初始偶数节点

        Node* pre = first_;       // 初始前序节点
        Node* next = even->ptr_;  // 初始后序节点

        while(1)
        {
            // 交换偶数奇数节点
            pre->ptr_ = even;           
            even->ptr_ = odd;   
            odd->ptr_ = next;

            pre = odd;     // 更新pre

            odd = next;    // 更新odd
                      
            if(odd == 0)
            {
                last_ = odd;
                break;
            }

            even = next->ptr_;  // 更新even

            if(even == 0)
            {
                last_ = even;
                break;
            }
           
            next = even->ptr_;  // 更新next
        }
    }



    int main()
    {
        LinkList list;
        for(int i=1; i<=11; i++)
        {
            list.add_node(new Node(i));
        }

        list.disp();

        cout<<endl<<"奇数节点和偶数节点交换后的结果如下"<<endl;

        list.swap_odd_even();

        list.disp();

        return 0;
    }

  • 相关阅读:
    Shiro配置文件ini详解
    Shiro配置文件ini详解
    [转]shiro基础教程
    [转]shiro基础教程
    arguments.callee的作用
    [转] C# WPF Unable to add event handler
    [转] C# WPF Unable to add event handler
    springmvcajax json对象 用Map接受
    springmvcajax json对象 用Map接受
    json 对象字符串相互转化, js中
  • 原文地址:https://www.cnblogs.com/kex1n/p/2286538.html
Copyright © 2011-2022 走看看