24.两两交换链表中的节点
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
操作1,2要从虚拟头开始,操作3,4要从2开始,所以循环条件要写成如下形式,如果链表长为偶数,则结束条件是cur->next != nullptr
,如果是奇数 cur->next->next != nullptr
while(cur->next != nullptr && cur->next->next != nullptr)
取临时节点1,3
ListNode* tmp = cur->next;
ListNode* tmp1 = cur->next->next->next;
19. 删除链表的倒数第 N 个结点
删除节点3必须要cur停在节点2,所以fast要走n+1步。
面试题 02.07. 链表相交
重点在于先找出两个链表的长度,求差使得长链表cur先走一步与短的并齐。然后循环到表尾,判断节点地址是否存在相同,相同处相交。