使用自己的方法完成了删除链表中所有相同的数字。
#include <iostream>
using namespace std;
typedef struct node_
{
int value;
struct node_ *next;
}Node;
typedef Node* pNode;
struct list_
{
Node* node;
};
void AddNode(pNode* head_, int value);
void displayLinkedlist(pNode head);
void releaseLinkedList(pNode* head);
void deleteNumber(pNode* head,int number);
int main()
{
pNode head = nullptr;
int number;
cout << "Please Enter a number(number = -1 exit): " << endl;
cin >> number;
while (number != -1)
{
AddNode(&head, number);
cout << "Please Enter a number(number = -1 exit): " << endl;
cin >> number;
}
displayLinkedlist(head);
cout << "find the number you entered , and delete it: " << endl;
cin >> number;
pNode tempHead = head;
deleteNumber(&tempHead, number);
return 0;
}
void AddNode(pNode* head_, int value)
{
Node *newNode = new Node;
newNode->value = value;
newNode->next = nullptr;
if (!(*head_))
{
if (newNode)
{
*head_ = newNode;
(*head_)->next = nullptr;
}
}
else
{
pNode lastNode = *head_;
while (lastNode->next)
{
lastNode = lastNode->next;
}
lastNode->next = newNode;
}
}
void displayLinkedlist(pNode head)
{
cout << "display the current linkedlist: " << endl;
while (head->next)
{
cout << head->value << " ";
head = head->next;
}
cout << head->value << endl;
}
void releaseLinkedList(pNode* head)
{
pNode temp = nullptr;
while (*head)
{
temp = *head;
*head = (*head)->next;
delete temp;
}
cout << "\n已经释放了内存" << endl;
}
void deleteNumber(pNode* head,int number)
{
bool isFound = false;
bool isFirst = false;
pNode tempNode = nullptr;
pNode tempHead = (*head);
pNode postNode = (*head)->next;
while (postNode)
{
if ((*head)->value == number&&(*head)->next)
{
isFound = true;
isFirst = true;
cout << "found it!\n";
break;
}
if (postNode->value == number)
{
isFound = true;
cout << "Found number: " << number << endl;
break;
}
(*head) = (*head)->next;
postNode = (*head)->next;
}
if (!isFound)
{
cout << "can't found this number: " << number << endl;
cout << "that mean has delete all number: " << number;
releaseLinkedList(&tempHead);
}
else
{
if (postNode->next&&!isFirst)
{
(*head)->next = postNode->next;
displayLinkedlist(tempHead);
tempNode = postNode;
delete tempNode;
deleteNumber(&tempHead, number);
}
else if(isFirst)
{
tempNode = (*head);
(*head) = (*head)->next;
displayLinkedlist(*head);
delete tempNode;
deleteNumber(head, number);
}
else
{
tempNode = (*head)->next;
delete tempNode;
(*head)->next = nullptr;
displayLinkedlist(tempHead);
deleteNumber(&tempHead, number);
}
}
}