前言:由于其他原因,这里我只对两两交换链表中的节点题目做出自己的理解,其余题目后续跟上
两两交换链表中的节点
思路:本想着是直接两两交换,但问题是,单纯的交换会使其链表断裂,显然达不到预期的效果,那么对于这道题的理解,回去复习了虚拟头节点的用法,因为采用虚拟头节点会使其简化且更容易理解。
实现中会遇到的问题:
1)、两两交换节点会涉及到所在链表的个数是奇数还是偶数
2)、循环的条件是什么或如何遍历整个节点
3)、虚拟头节点的具体操作
两两交换节点会涉及到所在链表的个数是奇数还是偶数
当为偶数时,使用两两交换会刚好,不会多出一个节点,同理为奇数时会多出一个节点,这个时候要根据不同的情况做出处理
创建一个虚拟头节点dummyHead和一个头指针current,最初的指向current->next为节点1,然后current->next->next为节点2依次向后的顺序
循环的条件是什么或如何遍历整个节点
此时我们需要进行遍历,也即是循环条件,这里将是否为空指针作为判断依据:
current->next!=NULL&¤t->next->next!=NULL 注意:是这里的顺序不能反,如果后面先执行,那么就会存在current->next为空的情况,编译器会提示错误
虚拟头节点的具体操作下来是要执行的步骤
temp0=current->next #将原指针1保存temp0
temp1=current->next->next->next #将原指针2保存temp1
current->next=current->next->next #开始交换
current->next->next =temp0 #新指针1
temp0->next=temp1 #新指针3
current=current->next->next #current遍历的长度
return dummyHead->next
到此按照这个方式就可以将链表中的节点两两交换了
参考资料: