链表学习1——C++指针的理解(1)

本文详细介绍了使用C++处理链表的方法,包括查找中间节点、反转链表后半部分及合并两个链表等核心步骤,并通过具体示例代码解释了每个过程。

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

1.C++中指针的主要作用是指向node(让你知道你现在所指的位置和node 是哪个,让你关注于你现在要处理的node),str-next的作用是为了连接链表(防止链表断开

2.p->next的变化,就是一个断舍离的过程——断了以前的,指向现在的。

3.指针的赋值如何理解(我指着它(node)呢,你也快指它啊!指上,对,指上,你就不会忘了,标记上了,我走了你正好帮我看着这个node,它很重要)

void reorderList(ListNode* head) {
        if (!head || !head->next) 
            return;
    
        // find the middle node: O(n)
        ListNode *slow = head, *fast = head;
        while (fast && fast->next && fast->next->next) {
            slow = slow->next;
            fast = fast->next->next;
        }
 
        // cut from the middle and reverse the second half: O(n)
        ListNode *head2 = slow->next;
        slow->next = NULL;
 
        ListNode *q = head2->next;
        head2->next = NULL;
        while (q) {
            ListNode *qNext = q->next;
            q->next = head2;
            head2 = q;//q指着一个Node,想让head2也知道它正在关注的东西,所以让它也指向它——相当于信息(地址)共享!
            q = qNext;//qNext指着一个Node,想让q也知道它正在关注的东西,所以让它也指向它——相当于信息(地址)共享!
        }
        ListNode* p = head;
        // merge two lists: O(n)
        for (q = head2; p; ) {
            auto t = p->next;
            p->next = q;
            p = p->next;
            q = t;
        }
        /*
        slow->next = reverse(slow->next);
        ListNode* q = slow->next; 
        //reverse(slow->next);
        while(p != slow && q ){
            ListNode * qNext = q->next;
            q->next = p->next;
            p->next = q;
            p = q->next;
            q = qNext;
        }
        */
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值