问题描述
给出一个链表,要求按照顺序将链表中每两个节点分成一组,并将组中两个节点交换顺序,重新组成新的链表后返回链表的头节点指针。要求只能使用额外的常量空间。题目链接:**点我**
样例输入输出
输入:[1,2,3,4]
输出:[2,1,4,3]
输入:[1,2,3]
输出:[2,1,3]
问题解法
此题就是链表的基本使用。只需要定义两个指针,依次对相邻的两个节点进行顺序交换即可。为了能够使链表的第一个和第二个节点能够像其他节点一样进行顺序交换,可以定义一个新的临时头节点放在原先链表的头节点的前面,这样就能在一个循环中完成两个相邻节点顺序的交换。因为是只新建了一个节点,并不是对链表的每个节点都新建节点,所以其占用的空间是常量的,满足题目的要求。代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
class Solution { public ListNode swapPairs(ListNode head) { ListNode tempHeadNode = new ListNode(0); tempHeadNode.next = head; ListNode p2 = tempHeadNode; ListNode p1 = tempHeadNode.next; while (p1 != null && p1.next != null) { p2.next = p1.next; p1.next = p1.next.next; p2.next.next = p1; p2 = p1; p1 = p1.next; } head = tempHeadNode.next; return head; } }
|