主页 > 开源代码  > 

算法-链表篇04-两两交换链表中的节点

算法-链表篇04-两两交换链表中的节点
两两交换链表中的节点

力扣题目链接

题目描述

给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。

解题思路

这道题非常考验处理链表的灵活性,其中链表节点交换和后移的操作需要对多个节点进行有序的操作。 首先我们判断节点的长度,如果节点长度小于二,则不需要任何操作,直接返回; 创建两个节点指针分别指向第一个和第二个节点; 对最前两个节点进行交换; 如果剩余节点长度如果大于等于二,则可以进行循环操作:

首先创建一个临时节点temp,用于保存已经交换完毕的节点的尾节点;把两个指针都向后移动两位,指向未进行交换操作的前两个节点;交换两个指针指向的节点,并续在temp后面。 题解 class Solution { public: ListNode* swapPairs(ListNode* head) { if(!head || !head->next){ return head; } ListNode* p1 = head; ListNode* p2 = head->next; head = p2; p1->next = p2->next; p2->next = p1; while(p1->next != nullptr && p1->next->next != nullptr){ ListNode* temp = p1; p1 = p1->next; p2 = p1->next; temp->next = p2; p1->next = p2->next; p2->next = p1; } return head; } }; 总结

这道题做起来非常头秃,虽然思路一开始就确定了,但是在做题的过程中,遇到了很多细节上的问题。希望大家都可以尝试着自己写一下,可以在过程中发现很多理论上注意不到的地方。

标签:

算法-链表篇04-两两交换链表中的节点由讯客互联开源代码栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“算法-链表篇04-两两交换链表中的节点