输入一个链表,反转链表后,输出新链表的表头。

该博客介绍了如何反转链表的方法,包括更改next指针域法和头插法。通过这两种方式,可以得到反转后链表的新表头。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

题目:输入一个链表,反转链表后,输出新链表的表头。

分析:

方法(1):更改next指针域法。当没有节点或者只有一个结点时,直接返回这个节点;否则至少有两个节点时,用三个指针n1,n2,n3,n1指向第一个节点,n2指向第二个节点,n3指向第三节点(可能为空),每次修改n2的next让其指向n1,然后利用n3保存下一个节点,然后利用n2移动n1和n2的相对位置(需要注意的是,最开始要将n1的next域置空,因为它反转后要做尾节点)。

 ListNode* ReverseList(ListNode* pHead) {
        
        //没有节点,或者只有一个节点,则就返回这个节点
        if (pHead == NULL || pHead->next == NULL)
            return pHead;

        //来到这说明至少有2个节点
        ListNode* n1 = pHead;//n1指向第一个节点
        ListNode* n2 = n1->next;//n2指向第二个节点
        n1->next=nullptr;//反转后第一个节点要做尾节点,因此它的next指向nullptr
        
        ListNode* n3 = n2->next;//n3指向第三个节点(可能为空)

        while (n2 != NULL)//因为每次修改的是n2的next指向,因此当n2为空时,n1是头结点
        {
            n2->next = n1;
            n1 = n2;
            n2 = n3;

            if (n3 != NULL)
            {
                n3 = n3->next;
            }
        }
        return n1;
    }

方法(2):头插法。让

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值