#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. Ext.Net 学习随笔 002 默认按钮

    在FormPanel中按回车按键,会触发默认按钮的click事件.设置方法为在FormPanel中设置DefaultButton属性,如果没有设置这个属性,默认为最后一个按钮. 1.缺省最后一个按钮为 ...

  2. 给linux安全模块LSM添加可链式调用模块(一)

    前些日子接了个外包的活,了解了一下Linux安全模块,发现了安全模块中的一些问题. 关于linux安全模块LSM在此就不多说了,大家google下就明白了. 这里主要介绍的是如何修改这个模块,使它可链 ...

  3. 【耐克】【空军一号 Nike Air Force 1】【软木塞】

     [高帮 全白 36-45] [空军一号 低帮 36-46] [空军一号 36-45] [Nike Air Force 1 Flyknit 空军中帮飞线系列 全黑 36-44] [耐克空军一号 软木塞 ...

  4. (转) 变分自编码器(Variational Autoencoder, VAE)通俗教程

    变分自编码器(Variational Autoencoder, VAE)通俗教程 转载自: http://www.dengfanxin.cn/?p=334&sukey=72885186ae5c ...

  5. [API]使用Blueprint来高雅的编写接口文档 前后端api文档,移动端api文档

    网址:http://apiary.io/ 介绍:一款非常强大的前后端交互api设计编辑工具(编辑器采用Markdown类似的描述标记,非常高效),高颜值的api文档,还能生成多种语言的测试代码. 中文 ...

  6. hibernate:Named query not known: findXXXX or XXXX is not mapped

    .hbm.xml文件所放的位置怎么看怎么都在spring配置的扫描路径中,就是会出现标题所示错误,查看log日志,的确也没发现XXXX被mapped的记录~ 参考解决方案: 在eclipse导出jar ...

  7. MySQL下载、安装及启动

    介绍 Mysql是最流行的关系型数据库管理系统,在WEB应用方面MySQL是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之 ...

  8. 关于Git的网址

    25个 Git 进阶技巧:[http://www.imooc.com/article/1089] Git版本控制与工作流:[http://www.imooc.com/article/1068]

  9. linux tar

    转自:http://www.cnblogs.com/qq78292959/archive/2011/07/06/2099427.html tar -c: 建立压缩档案-x:解压-t:查看内容-r:向压 ...

  10. 循环语句--for

    1.guess_age优化版v1.py #coding=utf-8 age = 22 for i in range(10): if i < 3: guess_num = int(input('i ...