题目:给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
思路一:
代码:
public ListNode swapPairs(ListNode head) {
ListNode list=new ListNode(0,head);//虚拟头节点
ListNode pre=list,cur1,cur2,next;
while(pre.next!=null&&pre.next.next!=null){
cur1=pre.next;//交换的两个节点中的第一个
cur2=cur1.next;//交换的两个节点中的第二个
next=cur2.next;
pre.next=cur2;//第一步
cur2.next=cur1;//第二步
cur1.next=next;//第三步
pre=cur1;//进入下一轮
}
return list.next;
}
思路二:递归思想。
代码:
public ListNode swapPairs(ListNode head) {
if(head==null||head.next==null){
return head;
}
ListNode next=head.next;
ListNode newloop=swapPairs(next.next);//递归
next.next=head;//交换
head.next=newloop;//交换
return next;
}