您的位置:首页 > 编程语言 > C语言/C++

链表的添加、查找删除、反向打印c++代码

2018-02-14 20:52 671 查看
c++代码#include<iostream>
#include<stack>
using namespace std;

struct linkNode
{
int data;
linkNode* next;
};
//添加节点到末尾
void addNode(linkNode** head,int data)
{
linkNode* newNode = new linkNode();//开辟内存
newNode->data = data;//创建节点
newNode->next = NULL;

if (*head == NULL)
*head = newNode;//头结点为空时,将此节点赋值给头结点
else
{
linkNode* tempNode = *head;
while (tempNode->next != NULL)
tempNode = tempNode->next;
tempNode->next = newNode;//添加到尾节点上
}
}
//查找并删除特定值
void findDeleteNode(linkNode* *head, int data)
{
if ((head == NULL) ||(*head = NULL))//为空
return;

linkNode *deleteNode = NULL;
if ((*head)->data == data)
{
deleteNode = *head;
(*head) = (*head)->next;
}
else
{
linkNode* tempNode = *head;
while ((tempNode->next != NULL)&&tempNode->next
->data != data)//加next是因为已经判断了head
tempNode = tempNode->next;

if ((tempNode->next != NULL) && tempNode->next
->data == data)
{
deleteNode = tempNode->next;
tempNode->next = tempNode->next->next;
}
if (deleteNode != NULL)
{
delete deleteNode;
deleteNode = NULL;
}
}

}
//输入一个链表的头结点,从尾到头反过来打印每个节点的值
//1 堆栈法
void printInvStack(linkNode *head)
{
stack<linkNode*>nodes;//堆栈的先进后出属性
linkNode* tempNode = head;
while (tempNode != NULL)
{
nodes.push(tempNode);
tempNode = tempNode->next;
}
while (!nodes.empty())
{
tempNode = nodes.top();
cout << tempNode->data << " ";
}
}
//递归法(递归本质是栈结构)
void printInvRecursively(linkNode *head)
{
if (head != NULL)
{
if (head->next != NULL)
printInvRecursively(head->next);
cout << head->data;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: