zoukankan      html  css  js  c++  java
  • LeetCode

    Given a linked list, swap every two adjacent nodes and return its head.

    Example:

    Given 1->2->3->4, you should return the list as 2->1->4->3.

    Note:

    • Your algorithm should use only constant extra space.
    • You may not modify the values in the list's nodes, only nodes itself may be changed.

    交换链表中的节点,题目不难,需要细心,有两种解法。

    1.递归,逻辑清晰。用临时节点保存交换中的中间节点,以防链表断裂,节点丢失。

    class Solution {
        public ListNode swapPairs(ListNode head) {
            if (head == null || head.next == null)
                return head;
            ListNode temp = head.next;
            head.next = swapPairs(head.next.next);
            temp.next = head;
            return temp;
        }
    }

    2.直接循环做,需要一个假的头节点来保存交换之后的头节点,同样需要临时节点保存交换中的中间节点。

    class Solution {
        public ListNode swapPairs(ListNode head) {
            if (head == null || head.next == null)
                return head;
            ListNode fakeHead = new ListNode(0), pre = fakeHead, temp = null;
            fakeHead.next = head;
            while (pre.next!=null && pre.next.next!=null) {
                temp = pre.next.next;
                pre.next.next = temp.next;
                temp.next = pre.next;
                pre.next = temp;
                pre = temp.next;
            }
            return fakeHead.next;
        }
    }

    在LeetCode上循环比递归耗时减少1ms

  • 相关阅读:
    C# 文件类的操作---删除
    C#实现Zip压缩解压实例
    UVALIVE 2431 Binary Stirling Numbers
    UVA 10570 meeting with aliens
    UVA 306 Cipher
    UVA 10994 Simple Addition
    UVA 696 How Many Knights
    UVA 10205 Stack 'em Up
    UVA 11125 Arrange Some Marbles
    UVA 10912 Simple Minded Hashing
  • 原文地址:https://www.cnblogs.com/wxisme/p/9885541.html
Copyright © 2011-2022 走看看