#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<stdbool.h>
//结构体定义
typedef struct node
{
int data;
struct Node *next;
}Node;
//创建节点
Node *create_node(int data)
{
Node *node = (Node *)malloc(sizeof(Node));
node->data = data;
node->next = NULL;
return node;
}
//创建链表
Node*create_list(int num)
{
Node *head = create_node(1); //头结点
Node *tmp = head;
for(int i = 0 ; i < num; i++)
{
Node *node = create_node(i);
tmp->next = node;
tmp = node;
}
return head;
}
//求链表长度
int list_len(Node *head)
{
int len = 0;
while(head != NULL)
{
head = head->next;
len++;
}
return len;
}
//增
Node *list_insert(Node *head, int index, int data)
{
if(index > list_len(head) || index <0) //不在五行之中
{
return head;
}
else if(index == 0) //爆头
{
Node *node = create_node(data);
node->next = head;
head = node;
}
else
{
Node *tmp = head;
for(int i = 0;i < index - 1; i++)
{
tmp = tmp->next; //找到插入位置
}
Node*node = create_node(data);
node->next = tmp->next; //保护机制
tmp->next = node;
}
return head;
}
//删
Node *list_delete(Node *head, int index)
{
if(head == NULL || index >= list_len(head) || index < 0) //空表,超出范围
{
return head;
}
else if(index == 0)
{
Node *tmp = head;
head = head->next;
free(tmp);
tmp = NULL;
}
else
{
Node *node = head;
for(int i = 0; i < index - 1; i++)
{
node = node->next;
}
Node *tmp = node->next;
node->next = tmp->next;
free(tmp);
tmp = NULL;
}
return head;
}
//查
Node* list_find(Node *node, int data)
{
if(head == NULL)
{
return NULL;
}
Node *node = head;
while(node)
{
if(node->data== data)
{
return node;
}
node = node->next;
}
return NULL;
}
//改指定位置
bool modify_index(Node *head, int index, int data)
{
if(head == NULL || index < 0)
{
return false;
}
Node *node = head;
for(int i = 0; i < index; ++i)
{
if(node == NULL)
{
return false;
}
node = node->next;
}
node->data = data;
return true;
}
//改指定数据
bool modify_data(Node *head, int data, int val)
{
Node *node = list_find(head, data);
if(node)
{
node->data = val;
return true;
}
return false;
}
单链表简单操作
最新推荐文章于 2022-05-17 00:21:35 发布