0016单链表的完整功能及单链表翻转

首先是单链表节点的类,在命名为OnelinkNode.h的头文件里:

#ifndef OnelinkNode_H_
#define OnelinkNode_H_
class OnelinkNode
{
public:
	int data;
	OnelinkNode* next;
	OnelinkNode(int k=0,OnelinkNode*nextNode=NULL)
	{
		data = k;
		next = NULL;
	}
	~OnelinkNode()
	{}
};

#endif//OnelinkNode_H_

再在另一个新的头文件Onelink.h中写以下代码:

#ifndef Onelink_H_
#define Onelink_H_
class Onelink
{
public:
	OnelinkNode* head;
	Onelink(int n=0);
	~Onelink();
	bool isEmpty()const
	{
		return head==NULL;
	}
	bool isFull()const
	{
		return false;  //总是不满
	}

	int length()const;
	OnelinkNode* index(int i)const;//定位第i个节点
	int get(int i)const;//获得第i个节点
	bool set(int i,int k);//设置第i个节点的数据域
	OnelinkNode* insert(OnelinkNode* p,int k);//将k插入到第

	bool remove(OnelinkNode* p);
	void output(OnelinkNode* p)const;
	void output()const;
	
};

#endif//Onelink_H_

Onelink类中的功能函数的实现,在资源文件中新添加一个cpp文件,加入以下代码:

//本文档实现单链表类中的功能函数
#include <iostream>
#include"OnelinkNode.h"
#include "Onelink.h"
using namespace std;
//用构造函数来创建一个单链表
Onelink::Onelink(int n)
{
	head=NULL;
	if(n>0)
	{
		int i=1;
		OnelinkNode *rear,*q;
		head = new OnelinkNode(i++);
		rear = head;
		while(i<=n)
		{
			q = new OnelinkNode(i++);
			rear->next = q;
			rear = q;
		}
	}
}

//用析构函数来撤销单链表

Onelink::~Onelink()
{
	OnelinkNode *p = head,*q;
	while(p!=NULL)
	{
		q = p;
		p = p->next;
		delete q;
	}

	head = NULL;
}
//返回单链表的长度

int Onelink::length()const
{
	int i=0;
	OnelinkNode *p = head;
	while(p!=NULL)
	{
		i++;
		p=p->next;

	}
	return i;
}
//定位,返回的是一个节点指针
OnelinkNode* Onelink::index(int i)const
{
	if(i<=0)return NULL;
	int j=0;
	OnelinkNode* p=head;
	while(p!=NULL&&j<i)
	{
		j++;
		p=p->next;
	}
	return p;
}
//设置单链表第i个节点的数据域数值
bool Onelink::set(int i,int k)
{
	OnelinkNode* p=index(i);  //先定位
	if (p!=NULL)
	{
		p->data=k;
		return true;
	}
	else
		return false;
}
//输出打印单链表,分两步,一部输出普通的节点,一步输出head为指针的单链表
void Onelink::output(OnelinkNode *p)const
{
	while(p!=NULL)
	{
		cout<<p->data<<"  ";
		p = p->next;
	}
	cout<<"\n";
}
//输出head指针指向的数据
void Onelink::output()const
{
	cout<<"Onelink:    ";
	output(head);
}

资源文件中的主函数里,我们用一个单链表翻转操作来部分检验以上所做的工作是否正确:

#include<iostream>
using namespace std;
#include "OnelinkNode.h"
#include "Onelink.h"

void reverse(Onelink &h)
{
	OnelinkNode *p=h.head,*q,*front=NULL;
	while(p!=NULL)
	{
		q=p->next;
		p->next=front;
		front = p;
		p = q;
	}
	h.head=front;
}

void main(void)
{
	Onelink h(5);
	h.output();  //输出单链表
   reverse(h);
   cout<<"Reverse: \n";
	h.output();

}
结果:


                                                                                             希望对初学者有帮助。2015年11月6日,西大楼。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值