#include "stdio.h"
#include "stdlib.h"
typedef struct list{
int data;
struct list *next;
}list;
list * initList(){
list *head = (list*)malloc(sizeof(list));
if (!head) {
printf("创建失败");
exit(0);
}
head->next = NULL;
return head;
}
int createList(list *head){
if (head == NULL){/*会打断施法的东西写到前面*/
printf("当前链表尚未初始化\n");
return 0;
}
int data;
printf("输入要插入的元素:>");
scanf("%d",&data);
list *node = initList();
node->data = data;
list *p = head;
while(p->next != head){/*遍历定位最后一个节点*/
p = p->next;
}
p->next = node;
node->next = head;
return 1;
}
int deleteList(list *head){
if (head == head->next){
printf("链表为空");
return 0;
}
list *temp,*ptr;
temp = head;
ptr = temp->next;
int del;
printf("请输入需要删除的元素:");
scanf("%d",&del);
while (ptr != head){
if (ptr->data == del) {/*数据域相同*/
temp->next = ptr->next;/*调账指针*/
free(ptr);/*释放内存*/
ptr = NULL;/*指针初始化*/
return 1;
}
temp = temp->next;/*移动指针*/
ptr = temp->next;/*指针跟着temp移动*/
}
printf("没有找到要删除的元素!\n");
return 0;
}
int insertList(list *head, int pos, int data){
list *temp;
int i;
if (head->next == head || pos < 1) return -1;
list *node = (list *)malloc(sizeof(list));
if (!node) return -1;
node->data = data;
node->next = NULL;
temp = head;
for (i=1; i<pos; ++i){
if (temp->next == head) {
printf("节点插入失败!\n");
return -1;
}
/*实际节点数小于pos的数就返回-1*/
/**
* 假设一共两个节点,但i<pos=4
* i = 1 ,满足条件进入循环,temp->next代表第一个节点
* i = 2 ,满足条件进入循环,temp->next代表第二个节点
* i = 3 ,满足条件进入循环,temp->next代表第三个节点(不存在),我们无法定位到第四个节点的前驱,
* 假设pos = 3,i=3时不进入循环,我们得到第二个节点,即第三个节点的前驱,可以继续后方的操作
* temp->next == head用来判断是否遍历完一个循环,在i=pos跳出循环之前假设已经循环完一圈说明节点不存在
* /*/
temp = temp->next;
}
node->next = temp->next;
temp->next = node;
return 1;
}
int display(list *head){
if (head == head->next){
printf("当前节点为空!\n");
return 0;
}
list *p = head->next;
while (p != head){
printf("%d ",p->data);
p = p->next;
}
printf("\n");
}
int main(){
list *L = initList();
L->next = L;
for (int i=1; i<5; i++)
createList(L);
deleteList(L);
printf("在第7位前插入元素:");
insertList(L,7,15);
printf("在第5位前插入元素:");
insertList(L,5,30);
display(L);
return 0;
}
输入:
输入要插入的元素:>1
输入要插入的元素:>2
输入要插入的元素:>3
输入要插入的元素:>4
请输入需要删除的元素:5
输出:
没有找到要删除的元素!
在第7位前插入元素:节点插入失败!
在第5位前插入元素:1 2 3 4 30