/*
* ===========================================================================
*
* Filename: Linklist.c
* Description:
* Version: 1.0
* Created: 2018年04月15日 12时49分59秒
* Revision: none
* Compiler: gcc
* Author: (ycs),
* Company:
*
* ===========================================================================
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct _node_ {
int data;
struct _node_ *next;//指针
}Linklist;
//创建空链表头
Linklist * create_empty() {
Linklist *head;
head = (Linklist*)malloc(sizeof(Linklist));
head->next = NULL;
return head;
}
//头插法插入链表
int insert_head_Linklist(Linklist *head,int data) {
Linklist * node = (Linklist*)malloc(sizeof(Linklist));
node->data = data;
node->next = head->next;
head->next = node;
return 0;
}
//尾插法插入链表
int insert_tail_Linklist(Linklist *head,int data){
Linklist *tail = head;
//遍历tail指针位置
while(NULL != tail->next) {
tail = tail->next;
}
Linklist *node = (Linklist*)malloc(sizeof(Linklist));
node->data = data;
//新节点插入
tail->next = node;
node->next = NULL;
return 0;
}
//顺序插入链表
int insert_order_Linklist(Linklist *head,int data){
Linklist *p = head;
//遍历判断节点大小
while(NULL != p->next && data > p->next->data)
p = p->next;
Linklist *node = (Linklist*)malloc(sizeof(Linklist));
node->data = data;
//新节点插入
node->next = p->next;
p->next = node;
return 0;
}
//删除特定节点
int del_Linklist(Linklist *head,int num){
Linklist *p = head;
Linklist *delNode = NULL;
int i = 0;
while(p){//遍历链表
if(i == num -1 ){//找到节点
delNode = p->next;
p->next = delNode->next;//链表指针指向下一个链表节点
free(delNode);//删除
}
i ++;
p = p->next;
}
}
//添加特定位置节点
int add_Linklist(Linklist *head,int data,int num){
Linklist *p = head;
Linklist *AddNode = (Linklist*)malloc(sizeof(Linklist));
AddNode->data = data;
int i = 0;
while(p){//遍历链表
if(i == num -1 ){//找到位置
AddNode->next = p->next;
p->next = AddNode;//添加
}
i ++;
p = p->next;
}
}
//逆序链表
int reverase_Linklist(Linklist *head){
Linklist *curent = head->next;
Linklist *tmp = NULL;
head->next = NULL;
while(NULL != curent){//curent和tmp的偏移
tmp = curent->next;
curent->next = head->next;//头插法
head->next = curent;
curent = tmp;
}
return 0;
}
int print_Linklist(Linklist *head){
Linklist *p = head;
while(NULL != p->next){
p = p->next;
printf("data : %d ",p->data);
}
printf("\n");
return 0;
}
int main(){
int i = 0;
Linklist *h = create_empty();
for(i = 0;i < 10; i ++) {
//insert_head_Linklist(h,i);
//insert_tail_Linklist(h,i);
insert_order_Linklist(h,i);
}
print_Linklist(h);
reverase_Linklist(h);
print_Linklist(h);
del_Linklist(h,3);
print_Linklist(h);
add_Linklist(h,7,3);
print_Linklist(h);
return 0;
}
链表基础
最新推荐文章于 2023-07-30 05:28:04 发布