#includeusing namespace std;
// 链表节点
struct LinkNode
{int data;
LinkNode* next;
};
// 头插法
LinkNode* HeadInsert()
{LinkNode *head = new LinkNode;
head->next = nullptr;
int iTemp = 0;
while (cin >>iTemp)
{LinkNode* node = new LinkNode;
node->data = iTemp;
node->next = head->next; // 新插入节点指向头节点所指向的位置
head->next = node; // 头节点指向新插入节点
}
return head;
}
// 尾插法
LinkNode* TailInsert()
{LinkNode* head = new LinkNode;
head->next = nullptr;
LinkNode* tail = new LinkNode; // 创建一个尾节点
tail = head;
int iTemp = 0;
while (cin >>iTemp)
{LinkNode* node = new LinkNode;
node->data = iTemp;
tail->next = node; // 尾节点指向新插入节点
tail = node; // 新插入节点作为新的尾节点
}
tail->next = nullptr; // 结束时尾节点置空
return head;
}
// 指定位置插入元素
LinkNode* InsertNode(LinkNode* link, int iFlag, int Data)
{LinkNode* pre = link; // 创建一个前置节点
for (size_t i = 0; i< iFlag; ++i)
{pre = pre->next;
}
LinkNode* node = new LinkNode;
node->data = Data;
node->next = pre->next; // 新插入节点指向前置节点的下一节点
pre->next = node; // 前置节点指向新插入节点
return link;
}
// 删除指定元素
LinkNode* DeleteNode(LinkNode* link, int Data)
{LinkNode* pre = link; // 创建一个前置节点
LinkNode* node = link->next; // 创建一个指针指向当前节点
while (node->data != Data)
{pre = node;
node = node->next;
}
pre->next = node->next; // 前置节点指向当前节点的下一位置
delete node; // 释放已删除的节点
return link;
}
// 输出测试
void PrintLink(LinkNode* link)
{LinkNode* temp = link->next;
while (temp)
{cout<< temp->data<< endl;
temp = temp->next;
}
}
int main()
{int iFlag = 2;
int iInsertdata = 6;
int iDeletedata = 3;
// 测试用例:首先用尾插法创建一个链表(eg.1~5),其次在链表的第2个节点插入元素6,最后删除元素为3的节点
PrintLink(DeleteNode(InsertNode(TailInsert(), iFlag, iInsertdata), iDeletedata));
}
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
成都创新互联公司-专业网站定制、快速模板网站建设、高性价比中山网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式中山网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖中山地区。费用合理售后完善,十多年实体公司更值得信赖。