题目
- 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
- 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
- 示例:
- 给定 1->2->3->4, 你应该返回 2->1->4->3.
代码实现
public class TwoChange {
public static void main(String[] args) {
ListNode node1=new ListNode(1);
ListNode node2=new ListNode(2);
ListNode node3=new ListNode(3);
ListNode node4=new ListNode(4);
node1.next=node2;
node2.next=node3;
node3.next=node4;
show(swapPairs(node1));
}
public static ListNode swapPairs(ListNode head) {
//如果head只有一个节点或者没有节点则直接返回
if(head==null||head.next==null){
return head;
}
//新建一个节点作为链表的头结点
ListNode node=new ListNode(0);
node.next=head;
//创建一个用于交换的辅助节点
ListNode preNode=node;
while(head!=null&&head.next!=null){
//新建两个指针,一个为快指针,一个为慢指针,用于交换节点
ListNode slow=head;
ListNode fast=head.next;
//交换节点
preNode.next=fast;
slow.next=fast.next;
fast.next=slow;
//移动用于交换的辅助节点
preNode=slow;
//移动头结点,因为要移动fast和slow指针
head=slow.next;
}
return node.next;
}
public static void show(ListNode node){
ListNode head=node;
while(head!=null){
System.out.print(head.val+ " -> ");
head=head.next;
}
}
}
class ListNode{
int val;
ListNode next;
public ListNode(int val) {
this.val = val;
}
}
实现结果
2 -> 1 -> 4 -> 3 ->