線性表的鏈?zhǔn)酱尜A結(jié)構(gòu)

#define Error -1
#define OK   1
typedef int Status;

typedef int ElementType;

typedef struct Node{
   
   ElementType data;
   struct Node * next;
}Node, * LinkList;

//獲得一個(gè)元素
Status GetElement(LinkList L, int i, ElementType *e){
 
   //指向第一個(gè)元素的值
   LinkList p = L->next;
   int j = 1;

   while (p && j < i) {
       p = p->next;
       j++;
   }
   
   if (!p || j > i) {
       return errno;
   }
   
   *e = p->data;
   return OK;
}

Status ListInsert(LinkList L, int i , ElementType e){

   LinkList p = L;
   
   for (int j = 1; j < i; j++) {
       p = p->next;
   }
   
   if (!p || i < 1) {
       return errno;
   }

   Node *node = (Node *)malloc(sizeof(Node));
   node->data = e;
   
   node->next = p->next;
   p->next = node;

   return OK;
};


//刪除元素
Status listDeleteElement(LinkList L, int i, ElementType *e){
   LinkList p = L;
   for (int j = 1; j < i; j++) {
       p = p->next;
   }
   if (!p || !p->next || i < 1) {
       return errno;
   }
   Node *node = p->next;
   p->next = node->next;
   *e = node->data;
   free(node);
   return OK;
}

LinkList CreateListTail(LinkList p, int n){
   
   LinkList tempNode, L;
   
   
   p = (Node *)malloc(sizeof(Node));
   p->data = 9999;
   p->next = NULL;
   
   L = p;
   
   for (int i = 1; i <= n; i++) {
       tempNode = (Node *)malloc(sizeof(Node));
       tempNode->data = i;
       L->next = tempNode;
       
       L = tempNode;
   }
   
   L->next = NULL;
   
   return p;
}

void LogListNode(LinkList p){
   
   LinkList L = NULL;
   L = p->next;
   
   while (L) {
       printf("%d---",L->data);
       
       L = L->next;
       
   }
  
}

Status clearList(LinkList * L){
   
   LinkList p = (*L)->next;
   
   LinkList q = NULL;
   
   while (p) {
    q = p->next;
       free(p);
    p = q;
       
   }

   (*L)->next = NULL;
   
   return OK;
   
}
// 獲得鏈表的最中間的節(jié)點(diǎn)的值
//利用快慢指針  慢指針每次1步, 快指針每次走兩步,當(dāng)快指針走到頭時(shí),慢指針就在中央

Status getListMidNode(LinkList p, ElementType *e){

   LinkList slow = p->next, quick=p->next;
   
   while (quick->next && quick) {
       
       quick = quick->next;
       
       if (quick->next) {
           quick = quick->next;
           slow = slow->next;
       }
   }
   
   *e = slow->data;
   
   return OK;
}



最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容