传送门
摘录
设想研究者交给你一张纸,上面写着“chocolate”并要求你大声读出这个词。从神经活动来看,该过程涉及动作的精密与复杂程度令人吃惊。首先视觉刺激由眼睛视网膜内的神经细胞检测出来,产生神经冲动并通过丘脑传到大脑的视觉联络区皮层,视皮层再将神经冲动传向颞叶后的角回,对词的字母顺序与形状编码,再将之与词的听觉码比较。一旦找到适当的听觉码就将其传递到维尔尼克听觉区,在这里进一步编码和解释,然后神经冲动传到布洛卡区,由它将信息转到运动皮层。运动皮层负责支配唇、舌、喉夹肌,使它们协同运动读出这个词来。真正令人开心的是大脑可以毫不费力地进行有效反应,将书本中成千上万的记号翻译成神经密码,将信息通报给其他脑区,最后理解并朗读出来。
两两交换链表中的节点
- 方法:双指针法
 - 过程:
 
交换链表节点
- 思路:过程模拟,示例调试
 - 代码(下列代码的操作步骤是按上图的三、二、一顺序)
 
ListNode* swapPairs(ListNode* head) {
    // 节点小于两个,直接返回
    if (head == nullptr || head->next == nullptr) {
        return head;
    }
    // 虚拟头节点,前指针为第n个,则后指针为第n+2个
    ListNode *before = new ListNode(0, head);
    ListNode *after = before->next->next;
    ListNode *newhead = before->next->next;
    while(after != nullptr) {
        // 将交换操作理解为:after节点的前一个节点的next指向after节点的next,after节点的next指向前一节点;before指向交换后的after节点
        before->next->next = after->next;
        after->next = before->next;
        before->next = after;
        // 前后指针更新,注意后指针要去合法的值,所以要提前判断
        before = after->next;
        after = before->next ? before->next->next : nullptr;
    }
    return newhead;
}
- 时间复杂度:O(n)
 - 空间复杂度:O(1)