#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
typedef int NodeDataType;
typedef struct node{
NodeDataType data;
struct node *next;
}Node;
//创建头节点,也就是初始化链表
Node * InitList(){
Node * phead = (Node *)malloc(sizeof(Node));
phead->next = NULL;
return phead;
}
//创建一个节点
Node * createNode(NodeDataType data){
Node * newNode = (Node *)malloc(sizeof(Node));
newNode->data = data;
newNode->next = NULL;
return newNode;
}
//尾插法
void createTail(Node *phead, NodeDataType data){
Node * newTail = createNode(data);
assert(phead);
Node *ptr = phead;
while(ptr->next != NULL){
ptr = ptr->next;
}
ptr->next = newTail;
}
//头插法
void createHead(Node *phead, NodeDataType data){
Node *newHead = createNode(data);
assert(phead);
Node *ptr = phead;
newHead ->next = ptr->next;
phead->next = newHead;
}
//遍历打印链表
void printNode(Node *phead){
assert(phead);
Node *ptr = phead->next;
while (ptr != NULL){
printf("%d\n",ptr->data);
ptr = ptr->next;
}
}
//链表的查找,查找链表中的第x个节点
Node * findNode(Node *phead, int x){
Node *result = phead;
while(result && x >= 1){
result = result->next;
x--;
}
if(result == NULL){
printf("No find\n");
return NULL;
}
else{
return result;
}
}
//在指定位置前插入一个节点
void insert(Node *phead, int x, NodeDataType data){
Node *result = findNode(phead,x-1);
Node *newNode = createNode(data);
Node *ptr = result;
newNode->next = ptr->next;
result->next = newNode;
}
int main(){
Node * phead = InitList();
createHead(phead,10);
createHead(phead,15);
createTail(phead,20);
insert(phead,2,50);
printNode(phead); //15 50 10 20
return 0;
}
C语言实现单向链表
最新推荐文章于 2024-10-13 22:25:31 发布