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 }
     
  • 相关阅读:
    php设计模式-工厂模式(一)
    php Pthread 线程 互斥锁
    php Pthread 多线程 Worker
    PHP多进程实例
    C# this 关键字
    .NET FileStream文件流,StreamReader文本流,MemoryStream内存流几种流的实例
    深入理解Static关键字修饰符
    SQL Server 视图
    .NET初识委托
    RSA加密
  • 原文地址:https://www.cnblogs.com/luckygxf/p/4113240.html
Copyright © 2011-2022 走看看