无头单链表的创建,及无头单链表逆转

来源:互联网 发布:淘宝靠谱的韩代知乎 编辑:程序博客网 时间:2024/06/08 06:42

无头头插单链表:

#include <stdio.h>#include <stdlib.h>typedef struct person{    int age;    struct person *next;}per;per *head_list(per *one,int num){    per *temp = (per *)malloc(sizeof(per));    temp->age = num;    temp->next = one;    return temp;}void show(per *head){    if(NULL == head)    {        return;    }    while(head)    {        printf("age is %d\n",head->age);        head = head->next;    }}int main(){    per *head = NULL;    head = head_list(head,10);    head = head_list(head,20);    head = head_list(head,30);    head = head_list(head,40);    head = head_list(head,50);    show(head);    return 0;}

无头尾插单链表:

#include <stdio.h>#include <stdlib.h>typedef struct person{    int age;    struct person *next;}per;per *tail_list(per *one, int num){    per *temp = (per *)malloc(sizeof(per));        temp->age = num;    per *head = one;    if(NULL == one)    {        return temp;    }    while(one->next)    {        one = one->next;    }    one->next = temp;    return head;}void show(per *head){    if(NULL == head)    {        return;    }    while(head)    {        printf("age is %d\n",head->age);        head = head->next;    }}int main(){    per *head = NULL;    head = tail_list(head,10);    head = tail_list(head,20);    head = tail_list(head,30);    head = tail_list(head,40);    head = tail_list(head,50);    show(head);    return 0;}
无头头插单链表逆转

#include <stdio.h>#include <stdlib.h>typedef struct person{    int age;    struct person *next;}per;per *head_list(per *one, int num){    per *temp = (per *)malloc(sizeof(per));        temp->age = num;    temp->next = one;    return temp;}per *reverse(per *head){    if(NULL == head)    {        return;    }    per *p,*q,*r;    p = head;    q = p->next;    r = q->next;    head->next = NULL;    while(r)    {        q->next = p;        p = q;        q = r;        r = r->next;    }    q->next = p;    head = q;    return head;}void show(per *head){    if(NULL == head)    {        return;    }    while(head)    {        printf("age is %d\n",head->age);        head = head->next;    }}int main(){    per *head = NULL;    head = head_list(head,10);    head = head_list(head,20);    head = head_list(head,30);    head = head_list(head,40);    head = head_list(head,50);    show(head);    printf("==================\n");    head = reverse(head);    show(head);    return 0;}

无头尾插单链表逆转:

#include <stdio.h>#include <stdlib.h>typedef struct person{    int age;    struct person *next;}per;per *tail_list(per *one, int num){    per *temp = (per *)malloc(sizeof(per));    temp->age = num;    per *head = one;    if(NULL == one)    {        return temp;    }    while(one->next)    {        one = one->next;    }    one->next = temp;    return head;}per *reverse(per *head){    if(NULL == head)    {        return;    }    per *p, *q, *r;        p = head;    q = p->next;    r = q->next;    head->next = NULL;    while(r)    {        q->next = p;        p = q;        q = r;        r = r->next;    }    q->next = p;    head = q;    return head;}void show(per *head){    if(NULL == head)    {        return;    }    while(head)    {        printf("age is %d\n",head->age);        head = head->next;    }}int main(){    per *head = NULL;    head = tail_list(head,10);    head = tail_list(head,20);    head = tail_list(head,30);    head = tail_list(head,40);    head = tail_list(head,50);    show(head);    printf("=================\n");    head = reverse(head);    show(head);    return 0;}


原创粉丝点击