#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. 【POJ3621】Sightseeing Cows

    Sightseeing Cows Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8331   Accepted: 2791 ...

  2. 3-HOP: A High-Compression Indexing Scheme for Reachability Query

    title: 3-HOP: A High-Compression Indexing Scheme for Reachability Query venue: SIGMOD'09 author: Ruo ...

  3. 访问者模式(Visitor Pattern)

    定义:封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作. Visitor 抽象访问者角色:为该对象结构中具体元素角色声明一个访问操作接口.该操作接口 ...

  4. oracle 职业学习指引

    风哥 它是阿里巴巴造出的概念.其本意是,在阿里巴巴的IT架构中,去掉IBM的小型机.Oracle数据库.EMC存储设备,代之以自己在开源软件基础上开发的系统. 思科.IBM.谷歌.高通.英特尔.苹果. ...

  5. SDDC-SDN-SDS

    SDDCSDNSDS软件定义存储是一个较大的行业发展趋势,这个行业还包括软件定义网络(SDN)和软件定义数据中心(SDDC). SDDC依赖于虚拟化和云计算技术, SDDC的目标是虚拟化数据中心的一切 ...

  6. WebAPI IIS PUT和DELETE请求失败

    IIS拒绝PUT和DELETE请求是由于IIS为网站默认注册的一个名为WebDAVModule的自定义HttpModule导致的,如果我们的站点不需要提供针对WebDAV的支持,解决这个问题最为直接的 ...

  7. An invalid character [32] was present in the Cookie value

    系统安装Tomcat版本为:tomcat8,登录时报错"An invalid character [32] was present in the Cookie value" 处理方 ...

  8. HTML5 Canvas核心技术图形动画与游戏开发(读书笔记)----第一章,基础知识

    一,canvas元素 1 为了防止浏览器不支持canvas元素,我们设置“后备内容”(fallback content),下面紫色的字即为后备内容 <canvas id="canvas ...

  9. 关于CPLD与FPGA的对比分析

    1.PLD/FPGA/CPLD PLD(Programmable Logic Device):可编程逻辑器件,数字集成电路半成品,芯片上按照一定的排列方式集成了大量的门和触发器等基本逻辑元件,使用者按 ...

  10. delphi中的各种文件类型介绍【转】

    1.DPR: Delphi Project文件,包含了Pascal代码.应用系统的工程文件2.PAS: Pascal文件,Pascal单元的源代码,可以是与窗体有关的单元或是独立的单元.3.DFM:D ...