24. Swap Nodes in Pairs

题目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.

1,递归
public class Solution {
     public ListNode swapPairs(ListNode head) {
        ListNode tempHead = new ListNode(1);
        ListNode tail = tempHead;
        reverse(head,tail);
        return tempHead.next;
     }
     
     private void reverse(ListNode head, ListNode tail){
         if(head == null || head.next == null){
             tail.next = head;
             return;
         }
         
         ListNode preNode = head;
         ListNode nextNode = head.next;
         ListNode temp = nextNode.next;
         
         tail.next = nextNode;
         tail = tail.next;
         tail.next = preNode;
         tail = tail.next;
         reverse(temp,tail);
     }
2,非递归
public ListNode swapPairs(ListNode head) {
        if(head == null || head.next == null){
            return head;
        }
        
        ListNode tempHead = new ListNode(1);
        ListNode tail = tempHead;
        ListNode preNode = head;
        ListNode nextNode = preNode.next;
        while(preNode != null && nextNode != null){
            ListNode temp = nextNode.next;
            tail.next = nextNode;
            tail = tail.next;
            tail.next = preNode;
            tail = tail.next;
            
            preNode = temp;
            if(preNode == null){
                break;
            }
            nextNode = preNode.next;
        }
        tail.next = preNode;
        return tempHead.next;
    }

你可能感兴趣的:(24. Swap Nodes in Pairs)