• 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 }
     
  • 相关阅读:
    使用Python进行文件操作
    Python学习笔记(六)Python组合数据类型
    python基本算法题(一)
    Python要如何实现(列表)排序?
    Python中输入和输出(打印)数据
    Python学习笔记(五)函数和代码复用
    关于Python缩进,我们该了解哪些?
    Python学习笔记(四)Python程序的控制结构
    Python学习笔记(三)字符串类型及其操作(2)
    Java视频按帧保存为图片
  • 原文地址:https://www.cnblogs.com/luckygxf/p/4113240.html
Copyright © 2020-2023  润新知