两两交换链表中的节点

此博客链接:https://www.cnblogs.com/ping2yingshi/p/12777720.html

两两交换链表中的节点(33min)

题目链接:https://leetcode-cn.com/problems/swap-nodes-in-pairs/

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

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

 

示例:

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

题解:

         思路:

                   1.创建一个虚拟偷节点。

                    2.使链表头节点到达虚拟头结点位置。

                    3.把相邻两个数交换位置,这里采用把虚拟头节点指向第一个节点的next,然后第一个节点的next在指向第一个节点,这就完成了两个节点转换。

                    4.把虚拟头节点向后移动两个位置。进行后面两个相邻节点的交换。

代码如下:

class Solution {
    public ListNode swapPairs(ListNode head) {
        ListNode newhead=new ListNode(0);
        newhead.next=head;
        head=newhead;
        ListNode cur=head;
        while(cur!=null&&cur.next!=null&&cur.next.next!=null)
        {
            ListNode one=cur.next;
            ListNode two=one.next;
            cur.next=two;
            one.next=two.next;
            two.next=one;
            cur=cur.next.next;
        }
        return newhead.next;

    }
}

 

posted @ 2020-04-26 10:45  萍2樱释  阅读(179)  评论(0编辑  收藏  举报