notepad++节点
Given a single Linked List and we have to delete the middle the element of the Linked List.
给定一个链表,我们必须删除链表中间的元素。
If the length of the linked list is odd then delete (( n+1)/2)th term of the linked list and if the list is of even length then delete the (n/2+1)th term of the liked list.
如果链接列表的长度为奇数,则删除链接列表的第((n + 1)/ 2)项;如果列表的长度为偶数,则删除喜欢列表的第(n / 2 + 1)项。
Example 1:
范例1:
If we have a Linked List : 1 → 2 → 3 → 4 → 5 → 6 → 7
After deleting the middle node the linked list will be:
1 → 2 → 3 → 5 → 6 → 7
4 is the middle node
Example 2:
范例2:
If we have a Linked List : 1 → 2 → 3 → 4 → 5 → 6 → 7 → 8
After deleting the middle node the linked list will be:
1 → 2 → 3 → 4 → 6 → 7 → 8
5 is the middle node
Algorithm:
算法:
To solve the problem we follow the following procedure,
为了解决该问题,我们遵循以下过程,
We initiate the two node pointer name as slow, fast. (like Floyd's tortoise algo, refer the link to my article of merge sort in the linked list).
我们将两个节点的指针名称初始化为慢,快。 (就像弗洛伊德(Floyd)的乌龟算法一样,请在链接列表中引用我的合并排序文章的链接)。
Each time we increment the slow by one whereas increment the fast pointer by two.
每次我们将慢速指针加一,而快速指针加二。
Repeat step 2 until the fast pointer goes to the end of the linked list.
重复步骤2,直到快速指针移到链接列表的末尾。
When fast pointer goes to the end of the list at the same time slow pointer points to the middle of the linked list.
当快速指针同时到达列表末尾时,慢速指针指向链接列表的中间。
Then delete the middle node.
然后删除中间节点。
C++ implementation:
C ++实现:
#include <bits/stdc++.h>
using namespace std;
struct node{
int data;
node* next;
};
//Create a new node
struct node* create_node(int x){
struct node* temp= new node;
temp->data=x;
temp->next=NULL;
return temp;
}
//Enter the node into the linked list
void push(node** head,int x){
struct node* store=create_node(x);
if(*head==NULL){
*head =store;
return;
}
struct node* temp=*head;
while(temp->next){
temp=temp->next;
}
temp->next=store;
}
//Delete the middle node from the linked list
void delete_node(node** head){
if((*head)->next==NULL){
*head=NULL;
return;
}
struct node* fast=(*head)->next;
struct node* slow=*head;
while(fast && fast->next && fast->next->next){
slow=slow->next;
fast=fast->next->next;
}
slow->next=slow->next->next;
}
//Print the list
void print(node* head){
struct node* temp=head;
while(temp){
cout<<temp->data<<" ";
temp=temp->next;
}
}
int main()
{
struct node* l=NULL;
push(&l,1);
push(&l,2);
push(&l,3);
push(&l,4);
push(&l,5);
push(&l,6);
cout<<"Before the delete operation"<<endl;
print(l);
delete_node(&l);
cout<<"\nAfter the delete operation"<<endl;
print(l);
return 0;
}
Output
输出量
Before the delete operation
1 2 3 4 5 6
After the delete operation
1 2 3 5 6
翻译自: https://www.includehelp.com/cpp-programs/delete-the-middle-node-of-a-linked-list-in-cpp.aspx
notepad++节点