天天看点

【leetcode-链表】两两交换链表中的节点

题目:

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

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

示例:

给定          1->2->3->4                , 你应该返回          2->1->4->3                .
      

思路:

首先需要建立pre、node1、node2和lat四个指针即可。

pre   node1  node2   lat

 h  ->  1  ->  2  ->  3  ->  4

然后pre->next=node2;node2.next=node1;node1.next=lat

接着向前移4个指针;

java代码:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode swapPairs(ListNode head) {
        if(head ==null || head.next==null) {
            return head;
        }

        ListNode h = new ListNode(0);
        ListNode pre = h;
        h.next = head;

        while (pre.next!=null && pre.next.next!=null) {
            ListNode node1 = pre.next;
            ListNode node2 = pre.next.next;
            ListNode lat = node2.next; //有可能为null

            pre.next = node2;
            node2.next = node1;
            node1.next = lat;

            pre = node1;
        }

        return h.next;
    }
}
           

由于水平有限,文章中难免会有一些错误,有纰漏之处恳请各位大佬不吝赐教!

及时更新最新文章和学习资料,一起来学习:

【leetcode-链表】两两交换链表中的节点

推荐阅读:

【leetcode链表】合并两个有序链表 

 【leetcode-链表】两数相加 

 【leetcode-链表】旋转链表

【leetcode-链表】环形链表 II 

【leetcode-链表】环形链表