您的位置:首页 > Web前端

剑指Offer 单向链表实现

2020-06-29 04:57 776 查看

单向链表实现

  • 单向链表节点结构体
#pragma once
struct ListNode
{
int m_nValue;
ListNode * m_pNext;
};
  • 单向链表函数功能实现
#include "List.h"
#include <exception>
#include<iostream>
using namespace std;

ListNode * CreateListNode(int value)
{
ListNode*newNode = new ListNode();
newNode->m_nValue = value;
newNode->m_pNext = nullptr;
return newNode;
}

void ConnectListNode(ListNode*pCurrent, ListNode*pNext)
{
if (pCurrent == nullptr)
throw exception("Invalid Parameter!");

pCurrent->m_pNext = pNext;
}

void PrintListNode(ListNode*pHead)
{
if (pHead == nullptr)
return;
ListNode*pTemp = pHead;
while (pTemp!=nullptr)
{
cout << pTemp->m_nValue << ' ';
pTemp = pTemp->m_pNext;
}
cout << endl;
}

void AddToTail(ListNode**pHead, int value)
{
ListNode*newNode = new ListNode();
newNode->m_nValue = value;
newNode->m_pNext = nullptr;

if (*pHead==nullptr)
{
*pHead = newNode;
return;
}
else
{
ListNode*pTemp = *pHead;
while (pTemp!=nullptr)
pTemp = pTemp->m_pNext;
pTemp = newNode;
}
}

void RemoveNode(ListNode**pHead, int value)//删除节点要考虑删除头结点和其他节点的区别
{
if (pHead == nullptr || *pHead == nullptr)
return;

ListNode *pTemp = *pHead;
ListNode*pNext = pTemp->m_pNext;
if ((*pHead)->m_nValue==value)
{
*pHead = (*pHead)->m_pNext;
delete pTemp;
pTemp = nullptr;

}
while (pNext!=nullptr)
{
if (pNext->m_nValue==value)
{
pTemp->m_pNext = pNext->m_pNext;
delete pNext;
pNext = nullptr;
}
else
{
pTemp = pNext;
pNext = pNext->m_pNext;
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: