zoukankan      html  css  js  c++  java
  • 链表基本操作(C语言)

    #include <stdio.h>
    #include <stdlib.h>

    typedef struct _list
    {
    int data;
    struct _list *next;
    }list,*plist;

    plist create_list(int *a,int len)
    {
    plist head=NULL;
    plist ptr=NULL;
    plist newnode=NULL;
    head=(plist)malloc(sizeof(list));
    head->data=a[0];
    head->next=NULL;
    ptr=head;
    for(int i=1;i<10;i++)
    {
    newnode=(plist)malloc(sizeof(list));
    newnode->data=a[i];
    newnode->next=NULL;
    ptr->next=newnode;
    ptr=ptr->next;
    }
    return head;
    }

    plist insert_node(plist head,int data,int pos)
    {
    plist node,ptr;
    ptr=head;
    node=(plist)malloc(sizeof(list));
    node->data=data;
    node->next=NULL;
    if(pos==0)
    {
    node->next=head;
    return node;
    }
    else
    {
    for(int i=0;i<pos && ptr->next != NULL;i++)
    {
    ptr=ptr->next;
    }
    node->next=ptr->next;
    ptr->next=node;
    return head;
    }
    }

    void print_list(plist head)
    {
    plist ptr=head;
    while(ptr != NULL)
    {
    printf("%d ",ptr->data);
    ptr=ptr->next;
    }
    printf("\n");
    }

    plist delete_node(plist head,int pos)
    {
    plist ptr=head;
    plist temp=NULL;
    if(pos==0)
    {
    ptr=head->next;
    free(head);
    return ptr;
    }
    else
    {
    for(int i=1;i<pos-1 && ptr->next->next != NULL;i++)
    {
    ptr=ptr->next;
    }
    if(ptr->next != NULL)
    {
    temp=ptr->next;
    ptr->next=temp->next;
    free(temp);
    return head;
    }
    else
    {
    free(ptr->next);
    ptr->next=NULL;
    }
    }
    }

    plist reverse_list(plist head)
    {
    plist a,b,c;
    a=NULL;
    b=head;
    c=head->next;

    while(b->next != NULL)
    {
    b->next=a;
    a=b;
    b=c;
    c=c->next;
    }
    b->next=a;
    return b;
    }

    int main(void)
    {
    int a[10];

    for(int i=0;i<10;i++)
    {
    a[i]=i;
    }
    plist head=NULL;
    head=create_list(a,10);
    print_list(head);

    head=insert_node(head,4,10);
    print_list(head);

    head=delete_node(head,12);
    print_list(head);

    head=reverse_list(head);
    print_list(head);
    }

  • 相关阅读:
    找出占用磁盘空间最大的前10个文件或文件夹
    把inline函数的定义放在头文件中
    判断是大端字节序还是小端字节序
    在source insight 中添加系统字体
    C++ inline 函数
    标准I/O函数库的三类缓冲
    内存分配失败错误处理
    P1765 手机
    P1321 单词覆盖还原
    P1308 [NOIP2011 普及组] 统计单词数
  • 原文地址:https://www.cnblogs.com/linyilong3/p/1863337.html
Copyright © 2011-2022 走看看