zoukankan      html  css  js  c++  java
  • Swap Nodes in Pairs

    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.

     这道题如果直接交换值是很easy的

     1 /**
     2  * Definition for singly-linked list.
     3  * public class ListNode {
     4  *     int val;
     5  *     ListNode next;
     6  *     ListNode(int x) {
     7  *         val = x;
     8  *         next = null;
     9  *     }
    10  * }
    11  */
    12 public class Solution {
    13     public ListNode swapPairs(ListNode head) {
    14         if(null == head || null == head.next)
    15             return head;
    16         ListNode front = head;
    17         ListNode behind = front.next;
    18         
    19         do{
    20             int temp = front.val;
    21             front.val = behind.val;
    22             behind.val = temp;
    23             if(null == behind.next || null == behind.next.next)
    24                 break;
    25             front = behind.next;
    26             behind = front.next;
    27         }while(true);
    28         
    29         return head;
    30     }
    31 }

     按照题目要求不交换值,交换节点的引用

     1 /**
     2  * Definition for singly-linked list.
     3  * public class ListNode {
     4  *     int val;
     5  *     ListNode next;
     6  *     ListNode(int x) {
     7  *         val = x;
     8  *         next = null;
     9  *     }
    10  * }
    11  */
    12 public class Solution {
    13     public ListNode swapPairs(ListNode head) {
    14         if(null == head || null == head.next)
    15             return head;
    16         ListNode behind = head;
    17         ListNode front = behind.next;
    18         ListNode temp;
    19         ListNode pre;
    20         //交换开头两个节点
    21         
    22         behind.next = front.next;
    23         front.next = behind;
    24         
    25         head = front;
    26       //交换一下front和behind
    27         temp = behind;
    28         behind = front;
    29         front = temp;
    30         
    31         pre = front;//倒数第二个指针
    32         
    33         while(null != front.next && null != front.next.next){
    34             behind = front.next;
    35             front = behind.next;
    36             
    37             behind.next = front.next;
    38             front.next = behind;
    39             
    40             temp = behind;
    41             behind = front;
    42             front = temp;
    43             
    44             pre.next = behind;
    45             pre = front;
    46         }
    47         
    48         return head;
    49     }
    50 }
     
  • 相关阅读:
    118/119. Pascal's Triangle/II
    160. Intersection of Two Linked Lists
    168. Excel Sheet Column Title
    167. Two Sum II
    172. Factorial Trailing Zeroes
    169. Majority Element
    189. Rotate Array
    202. Happy Number
    204. Count Primes
    MVC之Model元数据
  • 原文地址:https://www.cnblogs.com/luckygxf/p/4113240.html
Copyright © 2011-2022 走看看