C++单链表操作
#include <stdio.h>
typedef struct _Node
{
int value;
_Node *next;
}Node;
void AddNodeTail(Node *&head, int value)
{
Node *newNode = new Node;
newNode->value = value;
newNode->next = NULL;
if(head == NULL)
{
head = newNode;
}
else
{
Node *p = head;
while(p->next != NULL)
{
p = p->next;
}
p->next = newNode;
}
}
bool FindNode(const Node *head, int value)
{
Node *p = const_cast<Node*>(head);
bool found = false;
while(p != NULL)
{
if(p->value == value)
{
found = true;
break;
}
p = p->next;
}
return found;
}
void DeleteNode(Node *&head, int value)
{
if(head == NULL)
{
return;
}
Node *delNode = NULL;
if(head->value == value)
{
delNode = head;
head = head->next;
}
else
{
Node *pNode = head;
while(pNode->next != NULL && pNode->next->value != value)
{
pNode = pNode->next;
}
if(pNode->next != NULL && pNode->next->value == value)
{
delNode = pNode->next;
pNode->next = pNode->next->next;
}
}
if(delNode)
{
delete delNode;
}
}
void DeleteAllNode(Node *&head, int value)
{
while(head != NULL && head->value == value)
{
Node *delNode = head;
head = head->next;
delete delNode;
}
Node *pNode = head;
while(pNode->next != NULL)
{
if(pNode->next->value == value)
{
Node *delNode = pNode->next;
pNode->next = pNode->next->next;
delete delNode;
}
else
{
pNode = pNode->next;
}
}
}
void PrintList(Node *head)
{
while(head != NULL)
{
printf("%d ", head->value);
head = head->next;
}
printf("\n");
}
void ReverseList(Node *&head)
{
//空或者仅包含一个节点
if(head == NULL || head->next == NULL)
{
return;
}
Node *preNode = head;
Node *curNode = head->next;
preNode->next = NULL;
while(curNode != NULL)
{
Node *nextNode = curNode->next;
curNode->next = preNode;
preNode = curNode;
curNode = nextNode;
}
head = preNode;
}
int main()
{
PrintList(NULL);
Node *head = NULL;
AddNodeTail(head, 10);
AddNodeTail(head, 20);
AddNodeTail(head, 15);
AddNodeTail(head, 40);
AddNodeTail(head, 15);
PrintList(head);
printf("found %d in list %s\n", 20, FindNode(head, 20) ? "true" : "false");
printf("found %d in list %s\n", 30, FindNode(head, 30) ? "true" : "false");
DeleteNode(head, 10);
PrintList(head);
DeleteAllNode(head, 15);
PrintList(head);
DeleteNode(head, 15);
PrintList(head);
Node *nullNode = NULL;
DeleteNode(nullNode, 0);
Node *sameHead = NULL;
AddNodeTail(sameHead, 10);
AddNodeTail(sameHead, 10);
AddNodeTail(sameHead, 15);
AddNodeTail(sameHead, 15);
AddNodeTail(sameHead, 10);
AddNodeTail(sameHead, 15);
AddNodeTail(sameHead, 10);
PrintList(sameHead);
DeleteAllNode(sameHead, 10);
PrintList(sameHead);
Node *oneNode = NULL;
AddNodeTail(oneNode, 1);
ReverseList(oneNode);
PrintList(oneNode);
Node *twoNode = NULL;
AddNodeTail(twoNode, 1);
AddNodeTail(twoNode, 2);
ReverseList(twoNode);
PrintList(twoNode);
Node *fiveNode = NULL;
AddNodeTail(fiveNode, 1);
AddNodeTail(fiveNode, 2);
AddNodeTail(fiveNode, 3);
AddNodeTail(fiveNode, 4);
AddNodeTail(fiveNode, 5);
ReverseList(fiveNode);
PrintList(fiveNode);
return 0;
}
C++单链表操作的更多相关文章
- 单链表操作B 分类: 链表 2015-06-07 12:42 15人阅读 评论(0) 收藏
数据结构上机测试2-2:单链表操作B TimeLimit: 1000ms Memory limit: 65536K 题目描述 按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删除 ...
- 数据结构之 线性表---单链表操作A (删除链表中的指定元素)
数据结构上机测试2-1:单链表操作A Time Limit: 1000MS Memory limit: 4096K 题目描述 输入n个整数,先按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据 ...
- c语言实现--带头结点单链表操作
可能是顺序表研究的细致了一点,单链表操作一下子就实现了.这里先实现带头结点的单链表操作. 大概有以下知识点. 1;结点:结点就是单链表中研究的数据元素,结点中存储数据的部分称为数据域,存储直接后继地址 ...
- C单链表操作
#include <stdio.h> #include <stdlib.h> #define ElemType int #define Status int #define O ...
- C++ 单链表操作总结
第一.单链表的定义和操作 #include <iostream> using namespace std; template <typename T> struct Node ...
- c语言实现--不带头结点的单链表操作
1,不带头结点的单链表操作中,除了InitList(),GetElem(),ListInsert(),ListDelete()操作与带头结点的单链表有差别外,其它的操作基本上一样. 2,不带头结点单链 ...
- C语言,单链表操作(增删改查)(version 0.1)
这天要面试,提前把链表操作重新写了一遍.备份一下,以备不时之需. 希望有人能看到这篇代码,并指正. // File Name : list.h #include "stdafx.h" ...
- 【数据结构与算法】单链表操作(C++)
#include <stdio.h> #include <malloc.h> /*单链表节点定义*/ typedef struct LNode { int data; //da ...
- 数据结构之 线性表---单链表的操作B(先逆序+再删除重复元素)
数据结构上机测试2-2:单链表操作B Time Limit: 1000MS Memory limit: 65536K 题目描述 按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删 ...
随机推荐
- 小白也能弄懂的卷积神经网络(Convolutional Neural Networks )
本系列主要是讲解卷积神经网络 - Convolutional Neural Networks 的系列知识,本系列主要帮助大家入门,我相信这是所有入门深度学习的初学者都必须学习的知识,这里会用更加直接和 ...
- Redis6.0.6集群服务搭建
实现目标 一台主机上搭建3主3从高可用redis集群 环境 Linux :CentOS7 Redis : 6.0.6 准备工作 1.查看是否有安装wget命令,如果没有安装使用yum命令安装wgt命令 ...
- flume读取日志文件并存储到HDFS
配置hadoop环境 配置flume环境 配置flume文件 D:\Soft\apache-flume-1.8.0-bin\conf 将 flume-conf.properties.template ...
- 关于h5游戏开发,你想了解的一切都在这儿!
2020年,受疫情影响,线下产业红利褪去,线上迎来的新一轮的高峰.众多商家纷纷抓住了转型时机,开启了流量争夺战.H5游戏定制无疑是今年引流的大热门.如何开发一款有趣.有爆点.用户爱买单的好游戏呢? ...
- jenkins打包java maven项目
一.maven本地配置 1.修改apache-maven-3.6.1\conf\settings.xml文件,把仓库配置成本地仓库 <localRepository>D:\apache-m ...
- 3896. 【NOIP2014模拟10.26】战争游戏
鉴于如此一道恶心的题,作者还花了一个晚上草草学了tarjan. 于是乎,这道题就是道tarjan 具体怎么实现呢?正解上有个什么树形DP,看的我一脸懵逼. 这道题可以运用到tarjan一个高科技的算法 ...
- 【原创】Kuberneters-HelmV3.3.1入门介绍及实践
一.为什么需要Helm? Kubernetes目前已成为容器编排的事实标准,随着传统架构向微服务容器化架构的转变,从一个巨大的单体的应用切分为多个微服务,每个微服务可独立部署和扩展,实现了敏捷开发和快 ...
- 一起来读官方文档-----SpringIOC(04)
1.4.2.依赖性和详细配置 如上一节所述,您可以将bean属性和构造函数参数定义为对其他托管bean(协作者)的引用或内联定义的值.Spring的基于XML的配置元数据为此目的在其和元素中支持子元素 ...
- Django 仿ajax传递数据(Django十)
之前用form表单传递数据,没有遇到任何问题 具体见:https://blog.csdn.net/qq_38175040/article/details/104867747 然后现在我想用ajax传递 ...
- 简单地 Makefile 书写
注意事项 每个标签分支前都不能用空格,必须用tab 标签外调用bash命令用 $(shell -),标签内可以正常使用 标签后可以指定其他标签,执行顺序是先执行其他标签,而后在执行自己 比如 all: ...