代码随想录算法训练4day| 24. 两两交换链表中的节点,19.删除链表的倒数第N个节点,160.链表相交,142.环形链表II。

前言:由于其他原因,这里我只对两两交换链表中的节点题目做出自己的理解,其余题目后续跟上

两两交换链表中的节点

思路:本想着是直接两两交换,但问题是,单纯的交换会使其链表断裂,显然达不到预期的效果,那么对于这道题的理解,回去复习了虚拟头节点的用法,因为采用虚拟头节点会使其简化且更容易理解。

实现中会遇到的问题

        1)、两两交换节点会涉及到所在链表的个数是奇数还是偶数

        2)、循环的条件是什么或如何遍历整个节点

        3)、虚拟头节点的具体操作

两两交换节点会涉及到所在链表的个数是奇数还是偶数

        当为偶数时,使用两两交换会刚好,不会多出一个节点,同理为奇数时会多出一个节点,这个时候要根据不同的情况做出处理

        创建一个虚拟头节点dummyHead和一个头指针current,最初的指向current->next为节点1,然后current->next->next为节点2依次向后的顺序

循环的条件是什么或如何遍历整个节点

        此时我们需要进行遍历,也即是循环条件,这里将是否为空指针作为判断依据:

current->next!=NULL&&current->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

 到此按照这个方式就可以将链表中的节点两两交换了

参考资料:

        19. 删除链表的倒数第 N 个结点

        24.两两交换链表中的节点

        02.07. 链表相交

        142. 环形链表 II

       代码随想录

猜你喜欢

转载自blog.csdn.net/weixin_53333922/article/details/127061546