#ifndef List_h__
#define List_h__ #include <stdio.h> struct ListNode
{
int value;
ListNode* pNext;
ListNode(int n) :value(n), pNext(nullptr){}
}; class ListSolution
{
public:
ListSolution& AddToTail(ListNode** ppHead, int value);
ListSolution& RemoveNode(ListNode** ppHead, int value);
ListSolution& RemoveAll(ListNode** ppHead);
void Print(ListNode* pHead);
}; #endif // List_h__
#include "List.h"

ListSolution& ListSolution::AddToTail(ListNode** ppHead, int value)
{
if (!ppHead)
{
return *this;
} ListNode* pNewNode = new ListNode(value); if (nullptr == *ppHead)
{
*ppHead = pNewNode;
}
else
{
ListNode* pCurNode = *ppHead;
while (pCurNode->pNext)
{
pCurNode = pCurNode->pNext;
} pCurNode->pNext = pNewNode;
} return *this;
} ListSolution& ListSolution::RemoveNode(ListNode** ppHead, int value)
{
if (nullptr == ppHead
|| nullptr == *ppHead)
{
return *this;
} ListNode* pDelNode = nullptr;
if (value == (*ppHead)->value)
{
pDelNode = *ppHead;
*ppHead = (*ppHead)->pNext;
}
else
{
ListNode* pCurNode = (*ppHead);
while (pCurNode->pNext && pCurNode->pNext->value != value)
{
pCurNode = pCurNode->pNext;
} if (nullptr != pCurNode->pNext && pCurNode->pNext->value == value)
{
pDelNode = pCurNode->pNext;
pCurNode->pNext = pCurNode->pNext->pNext;
}
} if (pDelNode)
{
printf("remove %d\n", pDelNode->value);
delete pDelNode;
pDelNode = nullptr;
} return *this;
} ListSolution& ListSolution::RemoveAll(ListNode** ppHead)
{
if (nullptr == ppHead
|| nullptr == *ppHead)
{
return *this;
} ListNode* pCurNode = *ppHead;
ListNode* pDelNode = nullptr;
while (pCurNode->pNext)
{
pDelNode = pCurNode->pNext;
pCurNode->pNext = pCurNode->pNext->pNext; printf("remove %d\n", pDelNode->value);
delete pDelNode;
pDelNode = nullptr;
} printf("remove %d\n", (*ppHead)->value);
delete *ppHead;
*ppHead = nullptr; return *this;
} void ListSolution::Print(ListNode* pHead)
{
ListNode* pCurNode = pHead;
while (pCurNode)
{
printf(" %d", pCurNode->value);
pCurNode = pCurNode->pNext;
} printf("\n");
}
#include "List.h"

int main()
{
ListSolution s;
ListNode* pHead = nullptr; s.AddToTail(&pHead, );
s.AddToTail(&pHead, );
s.AddToTail(&pHead, );
s.AddToTail(&pHead, );
s.AddToTail(&pHead, );
s.AddToTail(&pHead, );
s.Print(pHead);
s.RemoveNode(&pHead, );
s.RemoveNode(&pHead, );
s.RemoveNode(&pHead, );
s.Print(pHead);
s.RemoveAll(&pHead); s.AddToTail(nullptr, );
s.Print(nullptr);
s.RemoveNode(nullptr, );
s.RemoveAll(nullptr); if (nullptr == pHead)
{
printf("pHead == nullptr\n");
} return ;
}

Create a Listlink的更多相关文章

  1. 记一次tomcat线程创建异常调优:unable to create new native thread

    测试在进行一次性能测试的时候发现并发300个请求时出现了下面的异常: HTTP Status 500 - Handler processing failed; nested exception is ...

  2. Could not create SSL connection through proxy serve-svn

    RA layer request failedsvn: Unable to connect to a repository at URL xxxxxx 最后:Could not create SSL ...

  3. android 使用Tabhost 发生could not create tab content because could not find view with id 错误

    使用Tabhost的时候经常报:could not create tab content because could not find view with id 错误. 总结一下发生错误的原因,一般的 ...

  4. Create a Team in RHEL7

    SOLUTION VERIFIED September 13 2016 KB2620131 Environment Red Hat Enterprise Linux 7 NetworkManager ...

  5. Create a bridge using a tagged vlan (8021.q) interface

    SOLUTION VERIFIED April 27 2013 KB26727 Environment Red Hat Enterprise Linux 5 Red Hat Enterprise Li ...

  6. [转]nopCommerce Widgets and How to Create One

    本文转自:https://dzone.com/articles/what-are-nopcommerce-widgets-and-how-to-create-one A widget is a sta ...

  7. Git异常:fatal: could not create work tree dir 'XXX': No such file or directory

    GitHub实战系列汇总:http://www.cnblogs.com/dunitian/p/5038719.html ———————————————————————————————————————— ...

  8. SQL Server 在多个数据库中创建同一个存储过程(Create Same Stored Procedure in All Databases)

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 遇到的问题(Problems) 实现代码(SQL Codes) 方法一:拼接SQL: 方法二: ...

  9. SharePoint 2013 create workflow by SharePoint Designer 2013

    这篇文章主要基于上一篇http://www.cnblogs.com/qindy/p/6242714.html的基础上,create a sample workflow by SharePoint De ...

随机推荐

  1. sublime Text 2 配置以及 Python环境搭建

    在搭建Python环境前,先设置好Sublime Text 2的环境. 一.Sublime Text 2配置: 1.离线安装: Perferences-->Browser Packages -- ...

  2. CSS初体验

    经过学习,我对css有了初步的认识.css是层叠样式表(Cascading Style Sheets的缩写,它用于HTML元素的显示形式,是W3C推出的格式化的标准技术.CSS现在已经被大多数浏览器所 ...

  3. 偶然翻出很久很久以前写的一款sqlmap UI,有点年头了

  4. Ajax - ASP.NET MVC 4 系列

           ASP.NET MVC 框架中包含一组 Ajax 辅助方法,可以用来创建表单和指向控制器操作的链接,它们是异步的,且不用编写任何脚本代码来实现程序的异步性,但需要引入脚本文件 jquer ...

  5. 10天学会phpWeChat——第一天:核心框架的目录结构

    phpWeCaht是一款优秀的PC网站+微信公共号开发框架. 本博客系列将图文结合,详细介绍phpWeChat 的使用方法,今天进入phpWeChat系列教程之<10天学会phpWeChat&g ...

  6. windows下安装boost库

    工作中现在会接触boost,所以我计划两个月之内努力熟悉一下boost.今天在自己win10系统上尝试安装了boost库,下面把遇到的问题总结一下: 1. 下好1.61版本库,在boost目录下运行b ...

  7. Oauth2.0认证---授权码模式

    目录: 1.功能描述 2.客户端的授权模式 3.授权模式认证流程 4.代码实现 1.功能描述 OAuth在"客户端"与"服务提供商"之间,设置了一个授权层(au ...

  8. R安装包

    提取安装的报的版本号 installed.packages()[,c("Package","Version")] 查询按住哪个报的描述 library()

  9. 扫描二维码自动识别手机系统(Android/IOS)

    移动互联网发展迅速,各种APP的开发都会推出多个版本(多终端),比如:iPhone版.iPad版.Android版.有些APP还会考虑覆盖到多个国家(国际化),比如:中文版.英文版.日文版.韩文版等. ...

  10. Netty服务端与客户端(源码一)

    首先,整理NIO进行服务端开发的步骤: (1)创建ServerSocketChannel,配置它为非阻塞模式. (2)绑定监听,配置TCP参数,backlog的大小. (3)创建一个独立的I/O线程, ...