• LeetCode-024-两两交换链表中的节点


    两两交换链表中的节点

    题目描述:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

    你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

    示例说明请见LeetCode官网。

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/swap-nodes-in-pairs/
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    解法一:双指针法
    • 首先,如果head为空或者head没有后继节点,直接返回head;

    • 然后用2个指针first和second分别指向第一个和第二个节点,new一个pre节点指向first,操作过程如下:

      • first的next指向second的next;

      • second的next指向first;

      • pre的next指向second;

      • 前面几步就是把first和second的位置交换;

      • 然后pre指向first;

      • first指向first的next;

      • 然后进行下一次遍历,条件是first不为空且first的next不为空,直到这个条件不成立,则遍历结束。

      • 返回结果。

    public class LeetCode_024 {
        public static ListNode swapPairs(ListNode head) {
            if (head == null || head.next == null) {
                return head;
            }
            ListNode newHead = head.next;
            ListNode pre = new ListNode(-1), first = head, second;
            pre.next = head;
            while (first != null && first.next != null) {
                second = first.next;
    
                first.next = second.next;
                second.next = first;
                pre.next = second;
    
                pre = first;
                first = first.next;
            }
    
            return newHead;
        }
    
        public static void main(String[] args) {
            ListNode head = new ListNode(1);
            head.next = new ListNode(2);
            head.next.next = new ListNode(3);
            head.next.next.next = new ListNode(4);
            head.next.next.next.next = new ListNode(5);
    
            ListNode result = swapPairs(head);
            while (result != null) {
                System.out.print(result.val + " ");
                result = result.next;
            }
        }
    }
    

    【每日寄语】 宇宙山河浪漫,生活点滴温暖,都值得你我前进。

  • 相关阅读:
    HDU 2089 不要62
    HDU 5038 Grade(分级)
    FZU 2105 Digits Count(位数计算)
    FZU 2218 Simple String Problem(简单字符串问题)
    FZU 2221 RunningMan(跑男)
    FZU 2216 The Longest Straight(最长直道)
    FZU 2212 Super Mobile Charger(超级充电宝)
    FZU 2219 StarCraft(星际争霸)
    FZU 2213 Common Tangents(公切线)
    FZU 2215 Simple Polynomial Problem(简单多项式问题)
  • 原文地址:https://www.cnblogs.com/kaesar/p/14946355.html
Copyright © 2020-2023  润新知