c语言单链表的各种操作<未完>

来源:互联网 发布:淘宝小件静物摄影技巧 编辑:程序博客网 时间:2024/05/22 01:58
#include<stdio.h>#include<stdbool.h>struct Node{    int val;    Node* next;};Node* Create(){    bool bFlag=true;    Node *pHead=NULL;    Node *pCur=NULL;    Node* pTemp=NULL;    int nVal;    pHead=(Node*)malloc(sizeof(Node));    if(NULL==pHead)    {        return NULL;    }    pHead->next=NULL;    pCur=head;    while(bFlag)    {        pTemp=(Node*)malloc(sizeof(Node));        printf("please input node value,if the value is 0 input finished.");        scanf("%d",&nVal);        if(nVal!=0)        {            pTemp->val=nVal;            pTemp->next=NULL;            pCur->next=pTemp;            pCur=pTemp;        }        else        {            bFlag=false;        }    }    pHead=pHead->next;    pCur->next=NULL;    return pHead;}int length(Node* head){    if(head==NULL)    {        return 0;    }    int i=0;    Node* cur=head;    while(cur!=NULL)    {        i++;        cur=cur->next;    }    return i;}bool print(Node *head){    if(NULL==head)    {        return false;    }    printf("list info:");    Node *cur=head;    while(NULL!=cur)    {        printf("%d\n",cur->val);        cur=cur->next;    }    return true;}Node* del(Node* head, int pos){    if((head==NULL)||(pos<1)||(pos>length(head)))    {        return NULL;    }        Node* cur=head;    if(pos==1)    {        cur=cur->next;        free(head);        head=NULL;        return cur;    }    //定位到删除节点的前一个节点    int i=0;    for(i=0;i<pos-1;i++)    {        cur=cur->next;    }    cur->next=cur->next->next;        return head;}Node* addafterpos(Node *head, int pos, int val){    if((head==NULL)||(pos<1)||(pos>length(head)))    {        return NULL;    }    Node* newnode=(Node*)malloc(sizeof(Node));    if(newnode==NULL)    {        return NULL;    }    newnode->val=val;    newnode->next=NULL;    Node* cur=head;    if (pos==length(head))    {        while(cur->next!=NULL)        {            cur=cur->next;        }        cur->next=newnode;    }    int i=0;    for(i=0;i<pos;i++)    {        cur=cur->next;    }    newnode=cur->next;    cur->next=newnode;    return head;}Node* insertbefore(Node* head, int pos, int val){    if((head==NULL)||(pos<1)||(pos>length(head)))    {        return NULL;    }    Node* newnode=(Node*)malloc(sizeof(Node));    if(newnode==NULL)    {        return NULL;    }    newnode->val=val;    newnode->next=NULL;    Node* cur=head;    if(pos==1)    {        newnode->next=cur;        return newnode;    }    int i=0;    for(i=0;i<pos-1;i++)    {        cur=cur->next;    }    newnode->next=cur->next;    cur->next=newnode;    return head;}int main(){    Node *head;    int len;    head=Create();    len=length(head);    printf("len:%d", len);    print(head);    head=del(head,1);     print(head);    head=addafterpos(head,4,5);    print(head);        head=insertbefore(head,1,1);    print(head);    return 0;}

原创粉丝点击