一 题目
Given a linked list, swap every two adjacent nodes and return its head.
You may not modify the values in the list's nodes, only nodes itself may be changed.
Example:
Given1->2->3->4
, you should return the list as2->1->4->3
二 分析
这是一个链表的题目。 medium难度,但是把我给绕晕了。就是基准点的next跟next.next的交换。
画图还是有助于理解。
public static void main(String[] args) {
// TODO Auto-generated method stub
ListNode node1 = new ListNode(1);
node1.next = new ListNode(2);
node1.next.next = new ListNode(3);
node1.next.next.next = new ListNode(4);
ListNode res = swapPairs(node1);
while(res != null){
System.out.print(res.val+"->");
res = res.next;
}
}
public static ListNode swapPairs(ListNode head) {
if(head == null|| head.next== null){
return head;
}
ListNode res = new ListNode(0);
res.next =head;
ListNode pre =res ;
while(pre.next != null&& pre.next.next != null){
ListNode t1 = pre.next;
ListNode t2 = pre.next.next;
pre.next = t2;
t1.next = t2.next;
t2.next= t1;
pre = t1;
}
return res.next ;
}
static class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}
Runtime: 0 ms, faster than 100.00% of Java online submissions for Swap Nodes in Pairs.
Memory Usage: 34.6 MB, less than 100.00% of Java online submissions for Swap Nodes in Pairs.