Leetcode Swap Nodes in Pairs 交换链表的节点对

来源:互联网 发布:谷歌有哪些好软件? 编辑:程序博客网 时间:2024/06/03 13:43


题目:


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.


分析:


1. 首先考虑链表是空或者只有一个节点,直接返回链表。

2. 链表的头节点一定会发生改变,因此使用dummy node。

3. 需要三个指针,一个指向需要交换的节点对的前一个节点,一个指向第一个需要交换的节点,最后一个指向第二个需要交换的节点


Java代码实现:


/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; } * } */public class Solution {    public ListNode swapPairs(ListNode head) {        if(head==null || head.next==null)            return head;                    ListNode dummy = new ListNode(0);        ListNode node = dummy;        ListNode first = head;        ListNode second = head.next;                while(second!=null)        {            ListNode temp = second.next;            node.next = second;            node.next.next = first;            node = node.next.next;            node.next = temp;            first = node.next;            if(first!=null)                second = first.next;            else                second = first;        }                return dummy.next;    }}


0 0