这里是
在这里插入代码片
引用在这里插入代码片
源1``
#include<stdio.h>
#include<stdlib.h>
#include"Sqlist.h"
int main(void)
{
SLNode *head;
init(&head);
int n, m;
int count;
int k;
scanf_s("%d", &n);
for (int i = 0; i < n; i++)
{
scanf_s("%d", &m);
count=Insert(head, i, m);
}
if (count == 1) //判断插入是否成功
{
k = deete(head);
}
if (k == 1)//判断删除值相同的多余节点是否成功
{
printLIst(head);
}
return 0;
}
Sqlist.cpp
#include"Sqlist.h"
#include<stdio.h>
#include<stdlib.h>
/* 链表初始化*/
void init(l** head)
{
*head = (l*)malloc(sizeof(l));
(*head)->next = NULL;
}
/*插入操作*/
int Insert(SLNode* head, int i, Shu x)
{
SLNode* p, * q;
int j = -1;
p = head;
while (p->next != NULL && j < i - 1)
{
p = p->next;
j++;
}
if (j != i - 1)
{
printf("输入位置错误");
return 0;
}
q = (SLNode*)malloc(sizeof(SLNode));
q->data = x;
q->next = p->next;
p->next = q;
return 1;
}
int deete(SLNode* head)
{
SLNode* ptr;//固定一端不动
SLNode* pts;//指向比较数据大小的节点位置
SLNode* pth;//指向pts的前一个位置
ptr=head;
pth = head;
pts = ptr->next;
while (ptr != NULL)
{
pts = ptr->next;
while (pts != NULL)
{
if (ptr->data == pts->data)
{
pth->next = pts->next;
free(pts);
pts = pth->next;
}
else
{
pth = pts;
pts=pts->next;
}
}
ptr = ptr->next;
}
return 1;
}
void printLIst(SLNode* head)
{
while (head->next != NULL)
{
head = head->next;
printf("%d ", head->data);
}
}
Sqlist.h
typedef int Shu;
/*定义结构体*/
typedef struct Node
{
Shu data;
struct Node* next;
}SLNode, l;
/* 链表初始化*/
void init(l** head);
/*插入操作*/
int Insert(SLNode* head, int i, Shu x);
/*删除多余节点*/
int deete(SLNode* head);
void printLIst(SLNode* head);
他们的结构是如图这样的
其中主函数是源1
具体功能实现是Sqlist.cpp
Sqlist.h是包含实现功能的头文件