用于从链接列表中删除最后一次出现的项目的 C++ 程序
使用指针,遍历整个列表并使用特殊指针跟踪包含最后出现键的节点之前的节点。在此之后,只需将下一个特殊指针的下一个存储到特殊指针的下一个中,以从链表中删除所需的节点。
C++
// C++ program to implement the
// above approach
#include
#include
using namespace std;
// A linked list Node
struct Node
{
int data;
struct Node* next;
};
// Function to delete the last
// occurrence
void deleteLast(struct Node** head,
int x)
{
struct Node** tmp1 = NULL;
while (*head)
{
if ((*head)->data == x)
{
tmp1 = head;
}
head = &(*head)->next;
}
if (tmp1)
{
struct Node* tmp = *tmp1;
*tmp1 = tmp->next;
free(tmp);
}
}
// Utility function to create a new
// node with given key
struct Node* newNode(int x)
{
Node* node = new Node ;
node->data = x;
node->next = NULL;
return node;
}
// This function prints contents of
// linked list starting from the given
// Node
void display(struct Node* head)
{
struct Node* temp = head;
if (head == NULL)
{
cout << "NULL";
return;
}
while (temp != NULL)
{
cout << temp->data <<
" --> ";
temp = temp->next;
}
cout << "NULL";
}
// Driver code
int main()
{
struct Node* head = newNode(1);
head->next = newNode(2);
head->next->next = newNode(3);
head->next->next->next =
newNode(4);
head->next->next->next->next =
newNode(5);
head->next->next->next->next->next =
newNode(4);
head->next->next->next->next->next->next =
newNode(4);
cout << "Created Linked list: ";
display(head);
// Pass the address of the head
// pointer
deleteLast(&head, 4);
cout << "List after deletion of 4: ";
display(head);
return 0;
}
// This code is contributed by khushboogoyal499
C++
// A C++ program to demonstrate deletion
// of last Node in singly linked list
#include
// A linked list Node
struct Node
{
int key;
struct Node* next;
};
void deleteLast(Node* head,
int key)
{
// Initialize previous of Node
// to be deleted
Node* x = NULL;
// Start from head and find the
// Node to be deleted
Node* temp = head;
while (temp)
{
// If we found the key,
// update xv
if (temp->key == key)
x = temp;
temp = temp->next;
}
// Key occurs at-least once
if (x != NULL)
{
// Copy key of next Node to x
x->key = x->next->key;
// Store and unlink next
temp = x->next;
x->next = x->next->next;
// Free memory for next
delete temp;
}
}
/* Utility function to create a
new node with given key */
Node* newNode(int key)
{
Node* temp = new Node;
temp->key = key;
temp->next = NULL;
return temp;
}
// This function prints contents of
// linked list starting from the
// given Node
void printList(struct Node* node)
{
while (node != NULL)
{
printf(" %d ",
node->key);
node = node->next;
}
}
// Driver code
int main()
{
// Start with the empty list
struct Node* head = newNode(1);
head->next = newNode(2);
head->next->next = newNode(3);
head->next->next->next =
newNode(5);
head->next->next->next->next =
newNode(2);
head->next->next->next->next->next =
newNode(10);
puts(
"Created Linked List: ");
printList(head);
deleteLast(head, 2);
puts(
"Linked List after Deletion of 1: ");
printList(head);
return 0;
}
C++
// A C++ program to demonstrate deletion
// of last Node in singly linked list
#include
using namespace std;
// A linked list Node
struct Node
{
int data;
struct Node* next;
};
// Function to delete the last
// occurrence
void deleteLast(struct Node* head,
int x)
{
struct Node *temp = head,
*ptr = NULL;
while (temp)
{
// If found key, update
if (temp->data == x)
ptr = temp;
temp = temp->next;
}
// If the last occurrence is the
// last node
if (ptr != NULL &&
ptr->next == NULL)
{
temp = head;
while (temp->next != ptr)
temp = temp->next;
temp->next = NULL;
}
// If it is not the last node
if (ptr != NULL &&
ptr->next != NULL)
{
ptr->data = ptr->next->data;
temp = ptr->next;
ptr->next = ptr->next->next;
free(temp);
}
}
/* Utility function to create a new
node with given key */
struct Node* newNode(int x)
{
Node* node = new Node ;
node->data = x;
node->next = NULL;
return node;
}
// This function prints contents of
// linked list starting from the given
// Node
void display(struct Node* head)
{
struct Node* temp = head;
if (head == NULL)
{
cout << "NULL";
return;
}
while (temp != NULL)
{
cout <<" --> "<< temp->data;
temp = temp->next;
}
cout << "NULL";
}
// Driver code
int main()
{
struct Node* head = newNode(1);
head->next = newNode(2);
head->next->next = newNode(3);
head->next->next->next =
newNode(4);
head->next->next->next->next =
newNode(5);
head->next->next->next->next->next =
newNode(4);
head->next->next->next->next->next->next =
newNode(4);
cout <<
"Created Linked list: ";
display(head);
deleteLast(head, 4);
cout <<
"List after deletion of 4: ";
display(head);
return 0;
}
// This code is contributed by shivanisinghss2110
输出:
Created Linked list: 1 --> 2 --> 3 --> 4 --> 5 --> 4 --> 4 --> NULL
List after deletion of 4: 1 --> 2 --> 3 --> 4 --> 5 --> 4 --> NULL
给定一个链表和一个要删除的键。从链接中删除最后一次出现的键。该列表可能有重复项。
例子:
Input: 1->2->3->5->2->10, key = 2
Output: 1->2->3->5->10
这个想法是从头到尾遍历链表。遍历时,跟踪最后出现的键。遍历完整列表后,通过复制下一个节点的数据并删除下一个节点来删除最后一次出现。
C++
// A C++ program to demonstrate deletion
// of last Node in singly linked list
#include
// A linked list Node
struct Node
{
int key;
struct Node* next;
};
void deleteLast(Node* head,
int key)
{
// Initialize previous of Node
// to be deleted
Node* x = NULL;
// Start from head and find the
// Node to be deleted
Node* temp = head;
while (temp)
{
// If we found the key,
// update xv
if (temp->key == key)
x = temp;
temp = temp->next;
}
// Key occurs at-least once
if (x != NULL)
{
// Copy key of next Node to x
x->key = x->next->key;
// Store and unlink next
temp = x->next;
x->next = x->next->next;
// Free memory for next
delete temp;
}
}
/* Utility function to create a
new node with given key */
Node* newNode(int key)
{
Node* temp = new Node;
temp->key = key;
temp->next = NULL;
return temp;
}
// This function prints contents of
// linked list starting from the
// given Node
void printList(struct Node* node)
{
while (node != NULL)
{
printf(" %d ",
node->key);
node = node->next;
}
}
// Driver code
int main()
{
// Start with the empty list
struct Node* head = newNode(1);
head->next = newNode(2);
head->next->next = newNode(3);
head->next->next->next =
newNode(5);
head->next->next->next->next =
newNode(2);
head->next->next->next->next->next =
newNode(10);
puts(
"Created Linked List: ");
printList(head);
deleteLast(head, 2);
puts(
"Linked List after Deletion of 1: ");
printList(head);
return 0;
}
输出:
Created Linked List:
1 2 3 5 2 10
Linked List after Deletion of 1:
1 2 3 5 10
当要删除的节点是最后一个节点时,上述解决方案不起作用。
以下解决方案处理所有情况。
C++
// A C++ program to demonstrate deletion
// of last Node in singly linked list
#include
using namespace std;
// A linked list Node
struct Node
{
int data;
struct Node* next;
};
// Function to delete the last
// occurrence
void deleteLast(struct Node* head,
int x)
{
struct Node *temp = head,
*ptr = NULL;
while (temp)
{
// If found key, update
if (temp->data == x)
ptr = temp;
temp = temp->next;
}
// If the last occurrence is the
// last node
if (ptr != NULL &&
ptr->next == NULL)
{
temp = head;
while (temp->next != ptr)
temp = temp->next;
temp->next = NULL;
}
// If it is not the last node
if (ptr != NULL &&
ptr->next != NULL)
{
ptr->data = ptr->next->data;
temp = ptr->next;
ptr->next = ptr->next->next;
free(temp);
}
}
/* Utility function to create a new
node with given key */
struct Node* newNode(int x)
{
Node* node = new Node ;
node->data = x;
node->next = NULL;
return node;
}
// This function prints contents of
// linked list starting from the given
// Node
void display(struct Node* head)
{
struct Node* temp = head;
if (head == NULL)
{
cout << "NULL";
return;
}
while (temp != NULL)
{
cout <<" --> "<< temp->data;
temp = temp->next;
}
cout << "NULL";
}
// Driver code
int main()
{
struct Node* head = newNode(1);
head->next = newNode(2);
head->next->next = newNode(3);
head->next->next->next =
newNode(4);
head->next->next->next->next =
newNode(5);
head->next->next->next->next->next =
newNode(4);
head->next->next->next->next->next->next =
newNode(4);
cout <<
"Created Linked list: ";
display(head);
deleteLast(head, 4);
cout <<
"List after deletion of 4: ";
display(head);
return 0;
}
// This code is contributed by shivanisinghss2110
输出:
Created Linked List:
1 2 3 4 5 4 4
Linked List after Deletion of 1:
1 2 3 4 5 4
有关详细信息,请参阅有关从链接列表中删除最后一个项目的完整文章!