双链表偶数节点求和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<data_<

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<

list.swap_odd_even();

list.disp();

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值