LeetCode_24|LeetCode_24 两两交换链表中的节点(链表题)

题目地址:https://leetcode-cn.com/problems/swap-nodes-in-pairs/
题目:
【LeetCode_24|LeetCode_24 两两交换链表中的节点(链表题)】给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
示例:

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

说明:
  • 你的算法只能使用常数的额外空间。
  • 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
试题分析:
这道题看描述很简单,但是真正动手写起来还是有些难度的,因为涉及到多指针的操作,因为涉及到链表上节点的两两交换,所以会涉及到3个节点的操作,当前节点、前置节点、前置的前置节点。算法思路就是顺序遍历链表节点,两两交换位置,交换完成后需要进行指针位置移动,做的过程中最好先画图搞清楚指针交换的过程再动手写代码。
代码:
public ListNode swapPairs2(ListNode head) {if(head==null || head.next==null){ return head; } //涉及到3个节点操作,前置节点、前置前置节点、当前节点 ListNode cur = head.next; ListNode prev = head; ListNode prevPrev = null; head = head.next; while(prev!=null && cur!=null){ //当前交换节点非空则交换cur和prev prev.next = cur.next; cur.next = prev; //记录前置前置节点为当次排序第二个节点,用于下次交换 prevPrev = prev; if(prev.next!=null && prev.next.next!=null) { prev = prev.next; cur = prev.next; prevPrev.next = cur; }else { break; } }return head; }

源码路径:com.monkey01.linkedlist.SwapNodesInPairs_24
配套测试代码路径:test目录com.monkey01.linkedlist.SwapNodesInPairs_24Test
https://github.com/feiweiwei/LeetCode4Java.git

    推荐阅读