删除任意位置节点和添加任意位置节点其实差不多,都是要先找到n-1的位置,然后进行下一步的操作。
唯一有区别的是,需要用断开链接之后,需要用free把节点在堆上的内存清理掉。
直接附上代码以供参考:
#include<stdio.h>
#include<stdlib.h>
#pragma warning (disable:4996)
struct Node
{
int data;
struct Node* link;
};
struct Node* head;//头节点
void Insertnew(int x, int n);
void Printf();
void Delete(int n);
int main()
{
head == NULL;
Insertnew(2, 1);
Insertnew(4, 2);
Insertnew(7, 1);
Insertnew(10, 2);
Delete(1);
Delete(2);
Printf();
}
void Insertnew(int x, int n)
{
Node* temp = new Node;
temp->data = x;
temp->link = NULL;
if (n == 1)
{
temp->link = head;
head = temp;
return;
}
Node* temp1 = head;
for (size_t i = 0; i < n - 2; i++)
{
temp1 = temp1->link;
}
temp->link = temp1->link;
temp1->link = temp;
}
void Printf()
{
Node* temp = head;
printf("List is");
while (temp != NULL)
{
printf(" %d ", temp->data);
temp = temp->link;
}
printf("\n");
}
void Delete(int n)
{
Node* temp = head;
if (n==1)
{
head = temp->link;
free(temp);
}
else
{
for (size_t i = 0; i < n - 2; i++)
{
temp = temp->link;
}
Node* temp1 = temp->link;
temp->link = temp1->link;
free(temp1);
}
}
C++