C语言链表反转

链表反转

typedef关键字

链表反转中,为了是代码简介这里用到了typedef关键字,先介绍下typedef关键字。
作用是为一种数据类型定义一个新名字,
这里的数据类型包括内部数据类型(int char 等)和自定义的数据类型(struct等)。
和struct来匹配,为了代码编写简介。
和普通类型匹配,通过名字来获取一些信息。

struct Student{
	int data;
	char *name;
};

上面这种写法,再用的时候需要:struct Student stu1;这样写

typedef struct Student{
	int data;
	char *name;
}STU;

但是这种写法,就相当于用STU来代替struct Student,我们在用的时候就可以直接写成 STU stu1;
有时候也会这样写

typedef struct Student{
	int data;
	char *name;
}*pSTU;

用的时候:

	pSTU pstu;
	pstu->data = 99;

创建链表

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

typedef struct node{
        int data;
        struct node *next;
}NODE;  //上文介绍了typedef的用法,可以看看

NODE *creatLink(int n)
{
        NODE *head;     //创建头节点
        NODE *node;     //创建普通节点
        NODE *end;      //创建尾节点
        head = (NODE *)malloc(sizeof(NODE));    //给头节点申请内存 
        end = head;     //将head的地址赋给end
        for(int i=1;i<=n;i++){
                node = (NODE *)malloc(sizeof(NODE));   //给输入的节点开辟空间
                printf("请输入第%d个数据: ",i);
                scanf("%d",&(node->data));      //获取数据到新节点的data里
                end->next = node;       //end的下一个是新节点
                end = node;     //新节点变为end
        }
        end->next =NULL;        //给end的指针域置空 
        return head;    //返回头节点的地址
}

void printLink(NODE *head)
{
        NODE *point = (NODE *)malloc(sizeof(NODE));
        point = head->next;     //因为头节点没有赋值,输入的第一个值赋给了head的下一个
        while(point != NULL){
                printf("%d ",point->data);
                point = point->next;
        }
        putchar('\n');
}

int main()
{
        int n;
        NODE *head = NULL;
        printf("请输入要创建的结点个数: ");
        scanf("%d",&n);
        head = creatLink(n);
        printLink(head);

        return 0;
}

反转链表

struct ListNode* ReverseList(struct ListNode* pHead ) {

    
    struct ListNode *pre = NULL; //前面
    struct ListNode *cur = pHead;//当前
    struct ListNode *tmp = NULL;//临时,用来存放数据
    
    while(cur){
        tmp = cur->next;
        cur->next = pre;
        pre = cur;
        cur = tmp;
    }
    return pre;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值