题目类型
链表反转
题目描述
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点,且必须在不修改节点内部的值的情况下完成本题,即:只能进行节点交换
效果图
题目分析
如果原始顺序是 dummy(虚拟头节点) --> node1 --> node2 ; 那么交换后 两个节点关系要变成 dummy --> node2 --> node1.
两两交换链表中的节点后,行链表的头节点就是dummy.next了,返回该节点即可
代码实现
public Node swapPairs (Node head){Node dummyNode = new Node(0,head);Node cur = dummyNode;while(cur != null && cur.next != null){Node node1 = cur.next;Node node2 = node1.next;cur.next = node2;node1.next = node2.next;node2.next = node1;cur = cur.next;}return dummyNode.next;
}
测试代码实现
public static void main(String[] args) {SingleLinkedList linkedList = new SingleLinkedList();int [] arr = {1,3,5,7,9};Node head = SingleLinkedList.transformSingleList(arr);System.out.println("原链表为:");linkedList.printSingleList(head);System.out.println();System.out.println("交换位置后的链表为:");ChangeTwoNode changeTwoNode = new ChangeTwoNode();Node newHead = changeTwoNode.changeTwoNode(head);linkedList.printSingleList(newHead);}
测试结果
原链表为:
1->3->5->7->9->
交换位置后的链表为:
3->1->7->5->9->