力扣24题两两交换链表中的节点

题目:

解题思路:

这是个套路题

对下面的六步进行循环执行

1.n1=p.next

2.n2=p.next.next

3.p.next=n2

4.n1.next=n2.next

5.n2.next=n1

6.p=n1,此时3和4已经调换了位置

7.再重复一轮(重复上面六步操作) n1=p.next

8.n2=p.next.next

9.p.next=n2

10.n1.next=n2.next(x代表空)

11.n2.next=n1

12.最后p=n1,发现5和6也发生了交换,实现了单向链表两两交换。

当n1 n2一开始在1、2节点的时候:

1.增加if语句对n1,n2在1、2处进行判断

2.增加dummy节点,但在retrun时要注意.要return dummy.next,因为dummy节点指向的0节点不存在于原来链表。

代码:(dummy的实现方法)

/**

 * Definition for singly-linked list.

 * function ListNode(val, next) {

 *     this.val = (val===undefined ? 0 : val)

 *     this.next = (next===undefined ? null : next)

 当两两相交有多余一个时,不需要对它交换,所以不需要对它处理

 * }

 */

/**

 * @param {ListNode} head

 * @return {ListNode}

 */

var swapPairs = function(head) {

    let dummy=new ListNode();

    dummy.next=head;

    let current=dummy;

    while(current.next!==null&&current.next.next!==null)

    {

        let n1=current.next;

        let n2=current.next.next;

        current.next=n2;

        n1.next=n2.next;

        n2.next=n1;

        current=n1;

    }

 

    return dummy.next;

};

 

 

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值