Linux C++ 单链表添加,删除,输出,逆序操作
/*单链表操作*/
#include <iostream>
using namespace std; class Node{
public:
Node(){
next=0;
}
Node(int el, Node *ptr=0)
{
info=el;
next=ptr;
}
int info;
Node *next;
}; class LList{
public:
LList(){head=tail=0;}
~LList();
int isEmpty(){return head==0;}
void addToHead(int);
void addToTail(int);
int deleteHead();
int deleteTail();
void deleteNode(int);
bool isInList(int)const;
void displayall() const;
void inverted();
private:
Node *head, *tail;
}; LList::~LList(){
for(Node *p;!isEmpty();){
p=p->next;
delete head;
head=p;
}
} void LList::addToHead(int el){
head=new Node(el,head);
if(tail==0)
tail=head;
} void LList::addToTail(int el){
if(tail!=0){
tail->next=new Node(el);
tail=tail->next;
}
else head=tail=new Node(el);
} int LList::deleteHead(){
int el=head->info;
Node *tmp=head;
if(head==tail)
head=tail=0;
else head=head->next;
delete tmp;
return el;
} int LList::deleteTail(){
int el=tail->info;
if(head==tail) {
delete tail;
head=tail=0;
}
else{
Node *tmp=NULL;
for(tmp=head;tmp->next!=tail;tmp=tmp->next);
delete tail;
tail=tmp;
tail->next=0;
}
return el;
}
void LList::deleteNode(int el){
if(head!=0){
if(head==tail && el == head->info)
{ delete head;
head=tail=0;
}
else if(el ==head->info)
{ Node *tmp=head;
head=head->next;
delete tmp;
}
else{
Node *pred,*tmp;
for(pred=head,tmp=head->next;tmp!=0 && (tmp->info==el);pred=pred->next,tmp=tmp->next);
if(tmp!=0){
pred->next=tmp->next;
if(tmp==tail)
tail=pred;
delete tmp;
}
}
}
} bool LList::isInList(int el) const{
Node *tmp;
for(tmp=head;tmp!=0 && !(tmp->info==el);tmp=tmp->next);
return tmp!=0;
}
void LList::displayall() const{
Node *tmp;
for(tmp=head;tmp!=0;tmp=tmp->next)
{cout<<tmp->info<<"-";}
cout<<endl;
} void LList::inverted(){
Node *pre=NULL;
Node *next=NULL;
tail=head; while(head!=NULL)
{
next=head->next;
head->next=pre;
pre=head;
head=next; }
head=pre;
} int main()
{
LList *list= new LList();
list->addToTail(1);
list->addToTail(2);
list->addToTail(3);
list->addToTail(4);
list->addToHead(0);
list->addToTail(4);
list->addToTail(5);
list->addToTail(6);
list->addToTail(7);
list->addToTail(8);
list->displayall(); list->inverted();
list->displayall(); return 0;
}
输出结果:
0-1-2-3-4-4-5-6-7-8-
8-7-6-5-4-4-3-2-1-0-
Linux C++ 单链表添加,删除,输出,逆序操作的更多相关文章
- C语言实现单链表的遍历,逆序,插入,删除
单链表的遍历,逆序,插入,删除 #include<stdio.h> #include<stdlib.h> #include <string.h> #define b ...
- C语言整数按照二进制逆序,输出逆序后的整数值
问题来源,今天早上和一舍友吃早餐的时候谈到的一个问题,将一个整数按照二进制逆序,然后输出逆序后的数值. 我们知道数值在内存中都是以二进制的形式存放的,假如我们是32位机,每8位为一个字节,int型在3 ...
- PTA 循环单链表区间删除 (15 分)
本题要求实现带头结点的循环单链表的创建和单链表的区间删除.L是一个带头结点的循环单链表,函数ListCreate_CL用于创建一个循环单链表,函数ListDelete_CL用于删除取值大于min小于m ...
- pta 奇数值结点链表&&单链表结点删除
本题要求实现两个函数,分别将读入的数据存储为单链表.将链表中奇数值的结点重新组成一个新的链表.链表结点定义如下: struct ListNode { int data; ListNode *next; ...
- Angular-表单动态添加删除
angular本身不允许去操作DOM,在angular的角度来说,所有操作都以数据为核心,剩下的事情由angular来完成.所以说,想清楚问题的根源,解决起来也不是那么困难. 前提 那么,要做的这个添 ...
- Linux C 单链表 读取文件 并排序 实例并解释
C的指针挺头疼的,先看一个例子: 给指针赋值和通过指针进行赋值这两种操作的差别确实让人费解.谨记区分的重要方法是:如果对左操作数进行解引用,则修改的是指针所指对象的值: 如果没有使用解引用操作, ...
- Linux内核单链表
主要说明Linux内核中单链表操作的关键思想,需要注意的地方 1. 假设 为了说明关键思想,对数据结构进行了精简 2. 数据结构定义 struct ListNode { int val; ListNo ...
- JavaScript学习 - 基础(八) - DOM 节点 添加/删除/修改/属性值操作
html代码: <!--添加/删除/修改 --> <div id="a1"> <button id="a2" onclick=&q ...
- 循环链表的创建、插入、删除、逆序、显示(C++实现)
对于单链表,因为每一个结点仅仅存储了向后的指针.到了尾标志就停止了向后链的操作,这样,其中某一结点就无法找到它的前驱结点了. 对于单链表的操作大家能够看我的这篇博客http://blog.csdn.n ...
随机推荐
- javascript 对象api
// Object 构造函数的属性: Object.prototype//可以为所有 Object 类型的对象添加属性 class A extends B{ constructor(){ super( ...
- OSPF RFC2740
2.5. Use of link-local addresses IPv6 link-local addresses are for use on a single link, for purpose ...
- RFC笔记,IPv6 Node Requirements
Request for Comments: 6434,IPv6 Node Requirements 路由器节点必须能够生成链路本地地址 5.9.2. IPv6 Stateless Address Au ...
- 5.Android-电话拨号器详解
之前学习了3.Android-ADT之helloworld项目结构介绍后,本章便来写个简单的电话拨号器程序. 实现的步骤如下所示: 1.创建项目 2.写layout/activity_main.xml ...
- MySQL 什么是事务?
该文为< MySQL 实战 45 讲>的学习笔记,感谢查看,如有错误,欢迎指正 一.事务简介 事务就是为了保证一组数据库操作,要么全部成功,要么全部失败. 事务是在引擎层实现的,也就是说并 ...
- 在本地搭建git服务器
GitHub就是一个免费托管开源代码的远程仓库.但是对于某些视源代码如生命的商业公司来说,既不想公开源代码,又舍不得给GitHub交保护费,那就只能自己搭建一台Git服务器作为私有仓库使用. 搭建Gi ...
- 在vue中继续使用layer.js来做弹出层---切图网
layer.js是一个方便的弹出层插件,切图网专注于PSD2HTML等前端切图多年,后转向Vue开发.在vue开发过程中引入layer.js的时候遇到了麻烦.原因是layer.js不支持import导 ...
- 谷歌BBR拥塞算法内核更新
为什么想到这个呢,算法什么的又不太懂,这是 因为搭建VPN + BBR 与之简直绝配 有的人搭建SSR ,配一个什么锐速,还需要降内核版本, 而且还容易出错,降了之后更加容易出现兼容性问题,所以偶尔看 ...
- go 环境及4开发
国内加速 在gopath目录执行 go env -w GOPROXY=direct go env -w GOSUMDB=off go env -w GOPROXY=https://goproxy.io ...
- C#在屏幕画点
Graphics类没有提供直接画点的方法,最开始想使用填充圆形区域來实现,结果发现点很大,占据了4个像素.使用起点和终点一样来划线什么也没画出.画矩形,画椭圆都没实现.最后试到填充矩形,这次成功了. ...