您的位置:首页 > 其它

linkList 简单链式链表的实现

2018-06-10 15:03 190 查看

单向链表实现的结构图

底层链表只需要有一个linkList就可以了,里面保存这指向第一个节点的指针,同时还有一个长度变量。

Element 是一个结构体,包含了linkListNode结构体,同时包含了自己的其他信息。

单向链表的操作没有复杂的内容,记得每次将next赋值为NULL。插入删除操作也没有什么太大区别,就是当删除最后一个元素的时候需要注意一下。

typedef struct _Element
{
    linkListNode node;
    int val;

}Element;
#ifndef LINKLIST_H_INCLUDED
#define LINKLIST_H_INCLUDED

//定义节点
typedef struct _linkListNode
{
struct _linkListNode* next;

}linkListNode;

//定义控制中心
typedef struct _linkList
{
linkListNode head;
int length;

}linkList;

linkList* Creat();

int Insert(linkList* llist, linkListNode * node, int pos);

linkListNode* Delete(linkList* llist, int pos);

int Destroy(linkList* llist);

int Clear(linkList* llist);

int Length(linkList* llist);

linkListNode* Get(linkList* llist, int pos);

#endif // LINKLIST_H_INCLUDED
#include <stdio.h>
#include <stdlib.h>

#include "linkList.h"

linkList* Creat()
{
linkList * ret = (linkList * )malloc(sizeof(linkList));
if(ret == NULL)
return NULL;
memset(ret, 0, sizeof(linkList));
ret->length = 0;
ret->head.next = NULL;
return ret;
}

int Insert(linkList* llist, linkListNode * node, int pos)
{
if(llist==NULL || node==NULL || pos<0 || pos>llist->length)
{
printf("Bad Parm!\n");
return -1;
}
linkListNode* current = (linkListNode*)llist;
for(int i=0; i<pos; ++i)
current = current->next;
node->next = current->next;
current->next = node;

llist->length++;
return 0;
}

linkListNode* Delete(linkList* llist, int pos)
{
if(llist==NULL || pos<0 || pos>llist->length-1)
{
printf("Bad Parm!\n");
return -1;
}
linkListNode* current = (linkListNode*)llist;
for(int i=0; i<pos; ++i)
current = current->next;
linkListNode* ret = current->next;
//如果删除的是最后一个元素,需要特殊处理一下 if(current->next->next == NULL) { current->next = NULL; llist->length--; return ret; } current->next = current->next->next; llist->length--; return ret; } int Length(linkList* llist) { if(llist==NULL) return -1; return llist->length; } int Destroy(linkList* llist) { if(llist==NULL) return -1; free(llist); return 0; } int Clear(linkList* llist) { if(llist==NULL) return -1; llist->length = 0; llist->head.next = NULL; } linkListNode* Get(linkList* llist, int pos) { if(llist==NULL || pos<0 || pos>llist->length-1) { printf("Bad Parm!\n"); return -1; } linkListNode* current = (linkListNode*)llist; for(int i=0; i<pos; ++i) current = current->next; return current->next; }

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: