剑指Offer24.反转链表

数据结构----力扣刷题

剑指Offer24.反转链表

题目

过题代码

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


struct ListNode* reverseList(struct ListNode* head){
    struct ListNode *p;//指向原链表的当前
    struct ListNode *s;//指向新建的链表结点
    struct ListNode *heads;//指向结果链表的头结点
    p = head;//先指向原链表的头节点
    if(head == NULL)//特判:当链表头节点为空时,表示该链表中没有数据,为一个空链表,直接返回这个空链表的头节点指针
    {
        return head;
    }
    heads = (struct ListNode *)malloc(sizeof(struct ListNode));//建立结果链表的头节点
    heads->next = NULL;//使用头插法时,头节点的next域要置为空,因为当结果链表生成后,heads->next将会成为最后一个结点,防止结果链表的最后一个结点的next域指向不知名的内存空间
    while(p != NULL)//当 原链表的当前结点不为空时进行循环
    {
        s = (struct ListNode *)malloc (sizeof(struct ListNode));//申请一个新的链表结点
        s->val = p->val;//将原链表的当前结点的值 赋值给 新申请的结点
        //printf("%d,",p->val);
        s->next = heads->next;//将新申请的结点插入到头节点之后
        heads->next = s;//将新申请的结点插入到头节点之后
        p=p->next;//指向下一个原链表的结点
    }
    return heads->next;//注意:要返回结果链表的首结点的指针,即头节点的next域

}

思路:
关键:采用头插法实现反转链表

用一个标记指针p扫描原链表的每一个结点 ----->新申请一个结点s,将p指向的结点值赋值给新结点s ----->将该节点插入结果链表的头节点之后(头插法) ----->返回结果链表的头节点的next域

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值