原题: https://leetcode-cn.com/problems/swap-nodes-in-pairs/
一、题目要求
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例 1:
输入:head = [1,2,3,4]
输出:[2,1,4,3]
示例 2:
输入:head = []
输出:[]
示例 3:
输入:head = [1]
输出:[1]
提示:
- 链表中节点的数目在范围
[0, 100]
内 0 <= Node.val <= 100
二、解题
package com.leetcode.test.linklist;
/**
* 编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。
*/
public class Solution10 {
public static void main(String[] args) {
ListNode a1 = new ListNode(1);
ListNode a2 = new ListNode(2);
ListNode a3 = new ListNode(3);
ListNode a4 = new ListNode(4);
a1.next = a2;
a2.next = a3;
a3.next = a4;
ListNode l = swapPairs(a1);
while (l != null) {
System.out.print(l.val + " ");
l = l.next;
}
}
//以第一个节点举例。先让第一个节点的next指向第三个节点,再让第二个节点的next指向第一个节点
public static ListNode swapPairs(ListNode head) {
if (head == null){
return null;
}
if (head.next == null){
return head;
}
ListNode cur = head;
ListNode firstNode = head.next; //新链表的头结点
ListNode lastNode = head;
while (cur != null && cur.next != null){ //奇数位置和他后一个位置互换节点
ListNode n = cur.next; //偶数位置节点
lastNode.next = n;
cur.next = n.next;
n.next = cur;
lastNode = cur;
cur = cur.next;
}
return firstNode;
}
}
三、运行结果