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 题目描述 按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删 ...
随机推荐
- C++STL中vector的初始化
vector的初始化有很多方式,在N维初始化时还会一些容易出现错误的地方.下面进行总结 以下的总结均以int作为模板参数 一维vector的初始化 vector的构造函数通常来说有五种,如下: vec ...
- 在MyBatis中采用模糊查询变量的引用标志应当是$而不是#
具体如下例: @Select("select count(*) from hy_stock where name like '%${keyword}%' or code like '%${k ...
- Keepalived之高可用LVS集群
前文我们聊了下keepalived的邮件通知相关配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13645163.html:今天我们来说说keepalive ...
- linux下限定连接ip和端口
1.限制端口 vim /etc/ssh/sshd_config 修改连接端口 修改之后重启sshd服务 service sshd restart 再次连接时就需要使用修改后的端口去连接了 备注:判断修 ...
- pytest文档1-pytest+Allure+jenkins+邮箱发送
前言: 1.pytest+allure是目前很多公司使用较多的一种报告样式,因为它更详细,各种指标更直观(简单的说就是看着更高大上,更能装X). 环境准备: 1.Windows10 2.Allure ...
- CTF-WeChall-第四天上午
2020.09.12 08:24 哈哈,go on!
- [LeetCode]55. 跳跃游戏(贪心)
题目 给定一个非负整数数组,你最初位于数组的第一个位置. 数组中的每个元素代表你在该位置可以跳跃的最大长度. 判断你是否能够到达最后一个位置. 示例 1: 输入: [2,3,1,1,4] 输出: tr ...
- [程序员代码面试指南]递归和动态规划-换钱的方法数(DP,完全背包)
题目描述 给定arr,arr中所有的值都为正数且不重复.每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个整数aim,求组成aim的方法数. 解题思路 完全背包 和"求换钱的 ...
- html+css入门基础案例之圣诞那些事
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 跟我一起学.NetCore之静态文件处理的那些事
前言 如今前后端分离开发模式如火如荼,开发职责更加分明(当然前后端一起搞的模式也没有完全褪去):而对于每个公司产品实施来说,部署模式会稍有差别,有的会单独将前端文件部署为一个站点,有的会将前端文件和后 ...