题目:
给定一个链表,交换每两个相邻的节点并返回其头。
例如,
给定1->2->3->4
,您应该返回列表2->1->4->3
。
您的算法应该仅使用恒定空间。您不能修改列表中的值,只能改变节点本身。
思路:从链表的头节点开始将相邻的两个节点进行交换位置,然后剩下未交换的节点作为一个新的链表进行递归的交换,直到所要进行交换的链表节点个数小于2,则返回此链表。
代码:
1 /** 2 * Definition for singly-linked list. 3 * public class ListNode { 4 * int val; 5 * ListNode next; 6 * ListNode(int x) { val = x; } 7 * } 8 */ 9 class Solution { 10 public ListNode swapPairs(ListNode head) { 11 12 //思路:从链表的头节点开始将相邻的两个节点进行交换位置,然后剩下未交换的节点作为一个新的链表进行递归的交换,直到所要进行交换的链表节点个数小于2,则返回此链表。 13 14 if(head==null||head.next==null){ 15 16 return head; 17 18 } 19 20 ListNode l=head.next.next;//剩下未进行交换节点组成的新链表的表头; 21 22 //将原链表的头节点和第二个节点进行交换位置 23 ListNode temp=head; 24 head=temp.next;//将原链表的第二个节点变为头节点 25 head.next=temp;//将原链表的头节点变为第二个节点 26 temp.next=swapPairs(l);//新链表进行递归交换相邻节点作为已经交换相邻节点的第二个节点的后继节点; 27 28 return head; 29 } 30 }