C++/C面试题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++/C面试题相关的知识,希望对你有一定的参考价值。
(1)单向链表操作
1)在链表尾部插入一个节点
void addNewNodeTail(ListNode **HeadNode, int value)//在链表尾部插入一个节点
{
ListNode* newNode = new ListNode();
newNode->Value = value;
newNode->next = nullptr;
if (*HeadNode == nullptr)//如果这个链表是空链表
*HeadNode = newNode;
else
{
ListNode*pNode = *HeadNode;
while (pNode->next != nullptr)//找到链表的最后一个节点
pNode = pNode->next;
pNode->next = newNode;//在链表尾部插入节点
}
}
//删除一个节点
void deleteNode(ListNode** HeadNode, int value)
{
if (HeadNode == nullptr || *HeadNode == nullptr)//首先考虑不是空链表
return;
ListNode* ptoDelectNode = nullptr;//指针指向要删除的节点
if ((*HeadNode)->Value == value)//如果头节点是要删除的节点
{
ptoDelectNode = *HeadNode;
*HeadNode = (*HeadNode)->next;
}
else
{
ListNode* pNode = *HeadNode;
while ((pNode->next->Value != value)&&(pNode->next!=nullptr))
pNode = pNode->next;
if ((pNode->next->Value == value) && (pNode->next != nullptr))
{
ptoDelectNode = pNode->next;
pNode->next = pNode->next->next;
}
if (ptoDelectNode != nullptr)
{
delete ptoDelectNode;
ptoDelectNode = nullptr;
}
else
{
printf("there is no matching value in this list\n");
}
}
}
//在第num个位置插入一个节点
void insertNode(ListNode** HeadNode, int value,int num)//在链表中第num个节点之前插入一个节点
{
if (value == NULL)
return;
ListNode* newInsertNode = new ListNode();
newInsertNode->Value = value;
newInsertNode->next = nullptr;
ListNode* pNode = *HeadNode;
if (*HeadNode == nullptr||num==0)
*HeadNode = newInsertNode;
else
{
for (int i = 0;i < num-1;i++)//找到位置
pNode = pNode->next;
pNode->next = newInsertNode;//插入
newInsertNode->next = pNode->next->next;
}
}
以上是关于C++/C面试题的主要内容,如果未能解决你的问题,请参考以下文章