leetcode 24 Swap Nodes in Pairs

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.

思路很清晰:就是每次跳两个节点,后一个接到前面,前一个接到后一个的后面,最后现在的后一个(也就是原来的前一个)接到下下个结点(如果没有则接到下一个)

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public ListNode swapPairs(ListNode head) {
      if(head == null)  
        return null;  
    ListNode helper = new ListNode(0);  
    helper.next = head;  
    ListNode pre = helper;  
    ListNode cur = head;  
    while(cur!=null && cur.next!=null)  
    {  
        ListNode next = cur.next.next; //每次跳两个节点 
        cur.next.next = cur;  //后一个接到前面
        pre.next = cur.next;  //此时helper和pre共享一个引用,则之前的后一个为helper的后继
        if(next!=null && next.next!=null) //最后现在的后一个(原来的前一个)接到下下个结点
            cur.next = next.next;  
        else  
            cur.next = next;  //如果没有则接到下一个
        pre = cur;  
        cur = next;  
    }  
    return helper.next;  
    }  
}

注意:

1. 单链表的所有查询都需要从头结点开始

2. 为了单链表操作方便(标示head方便),小技巧:新建一个结点,该结点的后继指向头。

3. 注意java中引用的概念,除了基本类型的对象"="之后,一般指向同一个空间,只是两个不同的引用

    即对于A a, b;如果a=b,则b改变了a也跟着变

你可能感兴趣的:(java,LeetCode)