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日,西大楼。

浙公网安备 33010602011771号