一、两两交换链表中的节点的题目描述与链接
24.两两交换链表中的节点的链接如下表所示,若无法直接点击下面的链接进入力扣做题的话,您也可直接复制下面的网址,然后进入力扣学习该题。在观看下面的内容之前您一定要先做一遍哦,这样才可以使你印象深刻!!!
题目描述:
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
示例 1:
输入:head = [1,2,3,4] 输出:[2,1,4,3]
示例 2:
输入:head = [] 输出:[]
示例 3:
输入:head = [1] 输出:[1]
提示:
- 链表中节点的数目在范围
[0, 100]
内 0 <= Node.val <= 100
二、Java版
两两交换链表中的节点可以用单链表的思想去做,示例代码如下代码块所示:
class Solution {
public ListNode swapPairs(ListNode head) {
ListNode dummyhead=new ListNode(-1); //设置一个虚拟头节点
dummyhead.next=head;
ListNode curr=dummyhead;
ListNode temp;
ListNode firstnode;
ListNode secondnode;
while(curr.next!=null&&curr.next.next!=null){
temp=curr.next.next.next; //存着第三个节点
firstnode=curr.next;
secondnode=curr.next.next;
curr.next=secondnode; //步骤一
secondnode.next=firstnode; //步骤二
firstnode.next=temp; //步骤三
curr=firstnode;
}
return dummyhead.next;
}
}
三、具体思路
该题主要采用单链表的思想去做,具体思路如下所示:
- 先设置一个虚拟头节点,再将虚拟头结点指向head,方便后面做删除操作;
- 定义临时节点temp,保存两个节点后面的节点,和临时两个节点firstnode和secondnode;
- 用temp保存cur的下下个节点,firstnode保存cur的下个节点,secondnode保存cur的下下个节点;
- 第一步先让cur的下个节点指向secondnode,第二步secondnode的下一个指向firstnode,第三步让firstnode的下一个保存在temp,最后一步cur移动,准备下一轮交换。
- 最后直接返回虚拟头结点的下一个节点的值。
最后,感谢各位读者的阅读与支持,您的支持是我前进的动力!我希望我的博文能够带给您有用的算法知识和启发。希望本题对大家有帮助,谢谢各位读者的支持!!!