1. 程式人生 > >C語言用一級指標也能實現單鏈表

C語言用一級指標也能實現單鏈表

linklist.h
#pragma once

#include"stdlib.h"
typedef struct LinkNode
{
//資料域
char* data;
//指標域
struct LinkNode* next;
}LinkNode,linklist;
//初始化
LinkNode
linklistInit();

//列印連結串列
void linklistPrint(LinkNode *head);

//尾插
LinkNodelinklistPushBack(LinkNode head, char* value);
//尾刪
void linklistPopBack(LinkNode *head);
//銷燬節點
void DestroyNode(LinkNode *node);

linklist.c
#include<stdio.h>
#include<stdlib.h>
#include"linklist.h"

LinkNode* linklistInit()
{
LinkNode* head = (LinkNode*)malloc(sizeof(LinkNode));
head->data = NULL;
head->next = NULL;
return head;
}
LinkNode* createnode(char* p)
{
if (p == NULL){ return NULL; }
LinkNode* tmpnode = (LinkNode*)malloc(sizeof(LinkNode));
tmpnode->data = p;
tmpnode->next = NULL;
return tmpnode;
}

void DestroyNode(LinkNode *node)
{
free(node);
}
void linklistPrint(LinkNode *head)
{
if (head == NULL)
{
return;
}
;
while (head != NULL)
{
printf("%s\n",head->data);
head = head->next;
}
}
//尾端插入
LinkNode linklistPushBack(LinkNode head, char value)
{
if (head == NULL){ return NULL;}
LinkNode

tmpnode = createnode(value);
while (head->next!= NULL)
{
head = head->next;
}
head->next = tmpnode;
return tmpnode;
}
//尾端刪除
void linklistPopBack(LinkNode *head)
{
if (head == NULL)
{
return;
}
if (head->next == NULL){

	return;
}
else{
while (head->next ->next!= NULL)
{
	head = head->next;
}
LinkNode* deletenode = head->next;
DestroyNode(deletenode);
head->next = NULL;
}

}
maintest.c
#include"stdlib.h"
#include"linklist.h"

void main(){
linklist list = linklistInit();
linklistPushBack(list, “wowowowow”);
linklistPushBack(list,“bbbbbb”);
linklistPrint(list);
linklistPopBack(list);
linklistPopBack(list);
linklistPrint(list);
system(“pause”);
}
具體原因可以參照我的上一篇文章的分析,網上大部分的觀點都是單鏈表用二級指標實現的,我也是糾結了很久搞不懂為什麼偏要二級指標,其實一級指標也能實現。