关闭

练习使用链表数据结构解决一件小问题

标签: 数据结构链表
58人阅读 评论(0) 收藏 举报

周末任务:

今天脑瓜一抽 突然想做链表的练习题:





#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <assert.h>
typedef struct node_tmp
{
    int data;
    struct node_tmp* next;    
}node;
//创建单链表
node* create(int n)
{
    assert(n>0);
    node* head;
    head = (node*)malloc(sizeof(node));
    head->next = NULL;
    printf("请输入head节点的值(int型):\n");
    scanf("%d",&head->data);
    if(1==n)
    {
        return head;
    }
    node* p = head;
    for(int i = 2;i <= n;i++)
    {
        node* tmp = (node*)malloc(sizeof(node));
        tmp->next = NULL;
        printf("请输入第%d个节点的值(int型):\n",i);
        scanf("%d",&tmp->data);
        p->next = tmp;
        p = tmp;
    }
    return head;
}

//问题1:链表逆置
//head指针不断后移,指针反向即可

node* reverse(node* head)
{
    if(head != NULL && head->next != NULL)
    {
        node* p = head;
        node* q = head->next;
        p->next = NULL;
        while(q->next != NULL)
        {
            head = q->next;
            q->next = p;
            p = q;
            q = head;
        }
        head->next = p;
    }
    return head;
}


void nodePrint(node* head)
{
    int i = 1;
    node* p = head;
    while(p != NULL)
    {
    printf("node%d->%d\n",i++,p->data);
    p = p->next;
    }
    return;
}


void main()
{
node* head;
head = create(3);
nodePrint(head);
printf("------------------\n");
head = reverse(head);
nodePrint(head);
free(head);
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:477次
    • 积分:80
    • 等级:
    • 排名:千里之外
    • 原创:7篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条
    文章存档