美文网首页
24.两两交换链表中的节点

24.两两交换链表中的节点

作者: 夜空中最亮的星_6c64 | 来源:发表于2018-12-20 22:04 被阅读0次

    题目描述:

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

    示例:

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

    说明:

    你的算法只能使用常数的额外空间。
    你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

    解答:

    public static ListNode swapPairs(ListNode head) {
            ListNode out=new ListNode(0);
            //next表示:链接后面的链表
            //out=0   out.next=1-2-3-4
            out.next=head;
            //rs=out=0   rs.next=out.next=1-2-3-4
            ListNode rs=out;
            ListNode swap;
            while(rs.next!=null&&rs.next.next!=null){
                
                //先看等号右侧的变化   rs指整个链表/首位的数   重点是2-4句中的链表链接   都是要变化原先的节点的next而且变化时使用的也是原先的节点不断地next
                
                //先定义一个临时变量   rs=0-1-2-3-4   rs.next=1-2-3-4   swap=1-2-3-4   
                swap=rs.next;
                //先链接后者   swap=1-2-3-4   swap.next=2-3-4   rs.next=1-2-3-4变为2-3-4   rs=0-2-3-4
                rs.next=swap.next;
                //前者链接后者的下一者   swap.next.next=3-4   swap=1-2-3-4   swap.next=3-4   swap=1-3-4
                swap.next=swap.next.next;
                //后者链接前者   swap=1-3-4   rs.next=0-2-3-4   rs.next.next=0-2-1-3-4
                rs.next.next=swap;
                //swap=1-3-4   rs=1-3-4   out=0-2-1-3-4
                rs=swap;
                
                /*超时
                rs.next=rs.next.next; 0(rs)链接2
                rs.next.next=rs.next.next.next;1(rs.next)链接3
                rs.next.next=rs.next;2(rs.next)链接1
                rs=rs.next;
                */
                
            }
            return out.next;
        }
    

    注意:

    1.next表示:链接后面的链表
    2.先看等号右侧的变化
    rs指整个链表/首位的数
    重点是while中2-4句的链表链接
    都是要变化原先的节点的next而且变化时使用的也是原先的节点不断地next,比如while中第2句:原先的节点是rs;使用时原先节点是swap。

    相关文章

      网友评论

          本文标题:24.两两交换链表中的节点

          本文链接:https://www.haomeiwen.com/subject/esaukqtx.html