题目
Given a linked list, swap every two adjacent nodes and return its head.
For example,
Given 1->2->3->4, you should return the list as 2->1->4->3.
思路
源码
public class SwapNodesInPairs {
public static class ListNode {
public int val;
public String text;
public ListNode next;
public ListNode(int data) {
this.val = data;
}
}
public static ListNode swapPairs(ListNode head) {
ListNode start = new ListNode(0); //前面加个节点
start.next = head;
//多一个current 工作指针
ListNode current = start;
while(current.next!=null && current.next.next!=null){
//两个工作指针,在循环里面初始化,省去很多空指针判断,比如first.next.next;
ListNode first =current.next;
ListNode second =current.next.next;
first.next = second.next;
second.next = first;
current.next = second;
current = current.next.next;
}
//返回start.next head有变化 返回会错误
return start.next;
}
public static void main(String args[]){
ListNode l1=new ListNode(1);
ListNode l2=new ListNode(2);
ListNode l3=new ListNode(3);
ListNode l4=new ListNode(4);
ListNode l5=new ListNode(5);
ListNode l6=new ListNode(6);
l1.next = l2;
l2.next = l3;
l3.next = l4;
l4.next = l5;
l5.next = l6;
ListNode ll = swapPairs(l1);
while (ll!=null){
System.out.print(ll.val);
ll=ll.next;
}
}
}