class HeroNode
{
public:
HeroNode(){}
HeroNode(int number,string name,string nickname)
{
this->No = number;
this->Name = name;
this->nickName = nickname;
}
int No;
string Name;
string nickName;
HeroNode *Next;
};
class SingelLinkList
{
public:
HeroNode * getHead()
{
return head;
}
//添加节点
void add(HeroNode *Hero)
{
Hero = new HeroNode(Hero->No,Hero->Name,Hero->nickName);
HeroNode *temp=head;
while (true)
{
if (temp->Next==nullptr)
{
break;
}
temp = temp->Next;
}
temp->Next = Hero;
}
void showList()
{
if (head->Next == nullptr)
{
cout << "链表为空" << endl;
return;
}
HeroNode *temp = head;
while (true)
{
if (temp->Next == nullptr)
{
break;
}
temp = temp->Next;
cout << "序号:" << temp->No << " 姓名为:" << temp->Name << " 昵称为:" << temp->nickName << endl;
}
}
void AddByOrder(HeroNode *Hero)
{
Hero = new HeroNode(Hero->No, Hero->Name, Hero->nickName);
HeroNode *temp = head;
bool flag = false;
while (true)
{
if (temp->Next == nullptr)
{
break;
}
if (temp->Next->No > Hero->No)
{
break;
}
else if (temp->Next->No == Hero->No)
{
flag = true;
break;
}
temp = temp->Next;
}
if (flag == true)
{
cout << "编号已存在,不能添加" << endl;
return;
}
else
{
Hero->Next = temp->Next;
temp->Next = Hero;
}
}
void updata(HeroNode *newHero)
{
if (head->Next == nullptr)
{
cout << "链表为空,无法更新" << endl;
return;
}
newHero = new HeroNode(newHero->No, newHero->Name, newHero->nickName);
HeroNode *temp = head;
bool flag = false;
while (true)
{
if (temp== nullptr)
{
break;
}
if (temp->No == newHero->No)
{
flag = true;
break;
}
temp = temp->Next;
}
if (flag == true)
{
temp->Name = newHero->Name;
temp->nickName = newHero->nickName;
delete newHero;
}
else
{
cout << "没有找到该序号" << endl;
return;
}
}
void deleList(int no)
{
if (head->Next == nullptr)
{
cout << "链表为空,无法删除" << endl;
return;
}
HeroNode *temp = head;
bool flag = false;
while (true)
{
if (temp->Next == nullptr)
{
break;
}
if (temp->Next->No == no)
{
flag = true;
break;
}
temp = temp->Next;
}
if (flag == true)
{
temp->Next = temp->Next->Next;
}
else
{
cout << "未找到要删除的结点" << endl;
return;
}
}
//获取节点个数
int getNumber(HeroNode *head)
{
if (head->Next == nullptr)
{
cout << "链表为空" << endl;
return 0;
}
int i = 0;
HeroNode *temp = head->Next;
while (temp != nullptr)
{
i++;
temp = temp->Next;
}
return i;
}
//获得倒数第k个节点
HeroNode* getIndex(HeroNode *head, int index)
{
if (head->Next == nullptr)
{
return nullptr;
}
int num = getNumber(head);
HeroNode *temp = head;
if (index <= 0 || index > num)
{
return nullptr;
}
for (int i = 0; i < num - index; i++)
{
temp = temp->Next;
}
return temp->Next;
}
//单链表反转
void reverseList(HeroNode *head)
{
if (head->Next == nullptr || head->Next->Next == nullptr)
{
return;
}
HeroNode *cur = head->Next;
HeroNode *next =nullptr;
HeroNode *reverseHead = new HeroNode(0, "", "");
while (cur != nullptr)
{
next = cur->Next;
cur->Next = reverseHead->Next;
reverseHead->Next = cur;
cur = next;
}
head->Next = reverseHead->Next;
}
//反向打印链表
void reversePrint(HeroNode *head)
{
if (head->Next == nullptr)
{
return;
}
HeroNode *cur = head->Next;
while (cur != nullptr)
{
stack.push(cur);
cur = cur->Next;
}
while (!stack.empty())
{
cout << "序号:" << stack.top()->No << " 姓名为:" << stack.top()->Name << " 昵称为:" << stack.top()->nickName << endl;
stack.pop();
}
}
stack<HeroNode*>stack;
private:
//头节点
HeroNode *head = new HeroNode(0,"","");
};
int main()
{
HeroNode *tempNode;
HeroNode *Hero1 = new HeroNode(1, "songjiang", "jishiyu");
HeroNode *Hero2= new HeroNode(2, "nezha", "natuo");
HeroNode *Hero3 = new HeroNode(3, "zhangfei", "feifie");
HeroNode *Hero4 = new HeroNode(4, "erlangshen", "duyan");
SingelLinkList List;
List.AddByOrder(Hero4);
List.AddByOrder(Hero3);
List.AddByOrder(Hero2);
List.AddByOrder(Hero1);
List.showList();
cout << "反转后:" << endl;
List.reversePrint(List.getHead());
/*
List.reverseList(List.getHead());
List.showList();*/
/*int num = List.getNumber(List.getHead());
cout << "链表节点个数为:" << num << endl;
cout << "删除后:" << endl;
List.deleList(2);
List.showList();
int num1 = List.getNumber(List.getHead());
cout << "链表节点个数为:" << num1<< endl;
tempNode = List.getIndex(List.getHead(),2);
cout << "倒数第2个节点为: 序号为:" << tempNode->No << " 姓名为:" << tempNode->Name << " 昵称为:" << tempNode->nickName << endl;
*/
system("pause");
return 0;
}