您的位置:首页 > 其它

交换链表的奇数节点和偶数节点

2009-06-04 09:23 197 查看
#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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐