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
.
Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.
题目要求从头算起,两个结点为一组交换位置。当时的思路是先计算组数,然后在一个for循环中组内交换。再一想不用记录组数,直接在循环内p=p.next.next,直接跳过两个就可以了。而且实现交换的条件也简单,需要 p!=null && p.next !=null。这样可以解决如果结点个数是奇数的情况。
代码:
package leetcode;
import java.util.List;
public class SwapNodes {
public static void main(String[] args) {
SwapNodes s = new SwapNodes();
ListNode n1 = new ListNode(1);
ListNode n2 = new ListNode(2);
ListNode n3 = new ListNode(3);
ListNode n4 = new ListNode(4);
n1.next=n2;
n2.next=n3;
n3.next=n4;
s.swapPairs(n1);
ListNode l = n1;
while(l!=null){
System.out.println(l.val);
l=l.next;
}
}
public ListNode swapPairs(ListNode h1){
ListNode p =h1;
while(p!=null && p.next!=null ){
//swap
int tmp = p.val;
p.val = p.next.val;
p.next.val = tmp;
p=p.next.next;
}
return h1;
}
}