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 ...
随机推荐
- RFC笔记—Neighbor Discovery for IP version 6 (IPv6)
Router Solicitation Message Source Address An IP address assigned to the sending interface, or the u ...
- MongoDB 复本集搭建
复制集的特点 数据一致性 主是唯一的,但不是固定的 没有MySQL那样的双主结构 大多数原则,集群存活节点小于等于二分之一时集群不可写,只可读. 是否能选举出新的主节点,是由当前复制集成员存活量 ...
- Vue简介与基础
一.什么是Vue.js Vue.js 是目前最火的一个前端框架,React是最流行的一个前端框架(React除了开发网站,还可以开发手机App, Vue语法也是可以用于进行手机App开发的,需要借助于 ...
- Leetcode面试题17.20_连续中值
题目地址 实现一个数列的动态添加和查询中位数. 复杂点的话应该可以写个平衡树什么的,然后查询第k大,还可以删除数字. 简单点的话显然可以维护两个堆,一个大顶堆一个小顶堆,而且大顶堆最多比小顶堆多一个, ...
- 迁移桌面程序到MS Store(14)——APPX嵌入WCF Service以Admin权限运行
Windows10 1809版本开始,微软又对UWP开放了新的Capability:AllowElevation. 通过这个新的Capability,UWP APP能够在运行时向用户请求Admin权限 ...
- 89组合margin、padding、float、clear问题
有关css外边距margin和内边距padding样式,简而述之,顺时针方向旋转,按照上右下左读取,margin-top:/*距离上边距*/margin-right:/*距离右边距*/margin-b ...
- linux 基础入门(9) 系统服务 systemctl 与 xinted的运用
9.系统服务 9.1系统服务 可以把计算机理解为一个地点比如中关村大街系统服务理解为中关村大街的理发店.饭店.商场等等,每一个都是一个系统服务,为客户提供不同内容的服务 服务:常驻在内存中的程序,且可 ...
- MySQL 8 InnoDB Table 和 Page 压缩
压缩用一点CPU换取磁盘IO.内存空间.磁盘空间. 在有Secondary Indexes 的表中,使用压缩更加明显,相关索引数据也会压缩. InnoDB 表压缩 对表压缩只需要在Create Tab ...
- vue搭建手顺
1.环境准备:node.js vue-cli: $ npm install vue-cli -g 2.建立项目目录:vuedemo,并cd到该目录下 3.$ vue init webpack vu ...
- AGC018F - Two Trees
题意 有两棵节点数均为 n 的有根树,你需要构造一个序列 \(X_1,X_2,...,X_n\).使得对于每一棵树的每一个节点, 若令它所有的后代(包括它本身)为 \(a_1,a_2,...,a_k\ ...