C语言链表基本操作

xiaoxiao2021-02-28  6

//链表节点定义

struct LinkNode {         int val;         struct LinkNode *next;

};

//创建长度为listLen的链表,每个节点的值为0~listLen-1

LinkNode * createLink(int listLen){

        struct LinkNode *phead,*ptail;         phead=ptail=(struct LinkNode *)malloc(sizeof(LinkNode));         phead->next=NULL;         for(int i=0;i<listLen;i++){                 struct LinkNode *nn = (struct LinkNode *)malloc(sizeof(LinkNode));                 nn->val = i;                 nn->next = NULL;                 ptail->next=nn;                 ptail=nn;         }        return phead->next;

}

//链表中值为val的节点后插入一个新的节点

LinkNode * insertNode(LinkNode *ph, int val){         if(ph==NULL || ph->next==NULL)                 return NULL;         LinkNode *ln=ph->next;         while(ln!=NULL && ln->val!=val){                 ln = ln->next;         }         if(ln!=NULL){                 LinkNode *nn = (LinkNode *)malloc(sizeof(LinkNode));                 nn->val=val;                 nn->next=ln->next;                 ln->next=nn;         }         return ph;

}

//删除链表中值为val的节点

//delete a node  LinkNode * delNode(LinkNode *ph, int val){         if(ph==NULL || ph->next==NULL)                 return NULL;         LinkNode *ln=ph->next;         LinkNode *lp=ph;         while(ln!=NULL && ln->val!=val){                 lp = ln;                 ln = ln->next;         }         if(ln!=NULL){                 LinkNode *tp = lp->next;                 lp->next=lp->next->next;                 free(tp);         }         return ph; }

//正序打印链表

void printLinkList(LinkNode *ph){         while(ph!=NULL){                 printf(" %d addr=%p\n ", ph->val,  ph->next);                 ph=ph->next;         }

}

//逆序打印链表

void printLinkListReverse(LinkNode *ph){         if(ph !=NULL ){                 if(ph->next != NULL){                         printLinkListReverse(ph->next);                 }                 printf("%d\n",ph->val);         } }

转载请注明原文地址: https://www.6miu.com/read-1400251.html

最新回复(0)