鏈表,單鏈表

關于鏈表的一些知識

ifndef LINKLIST_H

define LINKLIST_H

typedef void Linklist;

typedef struct _tag_LinkListNode
{
struct _tag_LinkListNode *next;
}LinkListNode;

Linklist* LinkList_Create(); //鏈表的創建

void LinkList_Destory(Linklist *list); //銷毀鏈表

void LinkList_Clear(Linklist *list); //清空鏈表數據

int Linklist_length(Linklist *list); //獲取鏈表長度

void Linklist_Insert(Linklist *list,LinkListNode *node,int pos); //插入數據到鏈表

LinkListNode* Linklist_get(Linklist* list,int pos); //獲取鏈表某一位置數據

LinkListNode* Linklist_Delete(Linklist *list,int pos); //刪除某以數據

endif // LINKLIST_H

include "linklist.h"

include <stdlib.h>

include <stdio.h>

typedef struct _tag_LinkList
{
LinkListNode header;
int length;
}TLinkList;

Linklist* LinkList_Create() //鏈表的創建
{
//g分配內存
TLinkList *Tlist = (TLinkList *)malloc(sizeof(TLinkList));
if(Tlist == NULL){
return NULL;
}
Tlist->header.next = NULL;
Tlist->length = 0;
return Tlist;
}

void LinkList_Destory(Linklist *list) //銷毀鏈表
{
if(list != NULL){
free(list);
}
}

void LinkList_Clear(Linklist *list) //清空鏈表數據
{
TLinkList *tlist = (TLinkList *)list;
if(tlist ==NULL)
{
return;
}
tlist->length = 0;
tlist->header.next = NULL;
}

int Linklist_length(Linklist *list) //獲取鏈表長度
{
TLinkList *tlist = (TLinkList *)list;
if(tlist ==NULL)
{
return -1;
}
return tlist->length;
}

void Linklist_Insert(Linklist *list,LinkListNode *node,int pos) //插入數據到鏈表
{
TLinkList *tlist = (TLinkList *)list;
LinkListNode *current = NULL;
if(list == NULL || node == NULL || pos < 0){
return;
}

 //要找到插入的前一個
 current = &tlist->header;
 for (int i = 0; (i < pos)&&(current->next!=NULL);i++){
     current = current->next;
 }

 node->next = current->next;
 current->next = node;
 tlist->length++;
 return;

}

LinkListNode* Linklist_get(Linklist* list,int pos) //獲取鏈表某一位置數據
{
TLinkList *tlist = (TLinkList *)list;
LinkListNode *current = NULL;
if(list == NULL || pos < 0 || pos >tlist->length){
return NULL;
}
//要找到插入的前一個
current = &tlist->header;
for (int i = 0; (i < pos)&&(current->next!=NULL);i++){
current = current->next;
}
return current->next;
}

LinkListNode* Linklist_Delete(Linklist *list,int pos) //刪除某以數據
{
TLinkList *tlist = (TLinkList *)list;
LinkListNode *current = NULL;
if(list == NULL || pos < 0 || pos >tlist->length){
return NULL;
}
//要找到插入的前一個
current = &tlist->header;
for (int i = 0; (i < pos)&&(current->next!=NULL);i++){
current = current->next;
}
LinkListNode *temp = current->next;
current->next = temp->next;
tlist->length--;
return temp;
}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 背景 一年多以前我在知乎上答了有關LeetCode的問題, 分享了一些自己做題目的經驗。 張土汪:刷leetcod...
    土汪閱讀 12,769評論 0 33
  • //leetcode中還有花樣鏈表題,這里幾個例子,冰山一角 求單鏈表中結點的個數----時間復雜度O(n)這是最...
    暗黑破壞球嘿哈閱讀 1,533評論 0 6
  • LinkList.h typedef void LinkList;typedef void LinkListNod...
    領悟悟悟閱讀 244評論 0 0
  • 鏈表 概念 說到鏈表,coder們都不會陌生,在日常開發中或多或少都會用到它。它是鏈式存儲的線性表,簡稱鏈表。鏈表...
    扈扈哈嘿閱讀 2,089評論 0 5
  • 鏈表(Linked List)是一種物理存儲單元上非連續、非順序的存儲結構,數據元素的邏輯順序是通過鏈表中的指針鏈...
    蓋世英雄_ix4n04閱讀 639評論 0 0