传送门
摘录
设想研究者交给你一张纸,上面写着“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)