C语言刷力扣之单链表反转,利用指针遍历链表,逐个元素反转

单链表转置完整函数如下:

struct ListNode* reverseList(struct ListNode* head){
    if(head==NULL||head->next==NULL){
        return head;
    }//考虑到特殊情况,链表为空便不需要反转
    struct ListNode *p=head;//先将头结点记为p
    struct ListNode *q=head->next;//将首元结点记为q
    struct ListNode *r=NULL;//指针r后面起的作用是记录剩余链表部分,防止找不到
    head->next=NULL;//原先的头指针是生成的反转链表的尾指针,则其next需要指向NULL
    while(q){//只要未到结点尾部,持续对链表中的每一个元素进行反转
        r=q->next;//记录暂时未参与反转操作的剩余部分的链表
        q->next=p;//q的指针域指向q的前驱结点p
        p=q;
        q=r;//将p,q向后移动,进行下一个元素的反转
    }
    head=p; //退出循环后,已反转成功,此时p为原先链表的尾结点,又为新链表的头结点
            //为返回值统一,可将其赋值给head,也可忽略此步,则下面return p;
    return head;//返回反转形成的新链表的头结点
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值