题目:
Given a linked list, swap every two adjacent nodes and return its head.
For example,
Given 1->2->3->4, you should return the list as 2->1->4->3.
Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.
本题相对比较简单,就是交换相邻两个元素的位置,可以使用遍历法和递归法两种方法,递归法使用两个指针记录当前要交换位置的节点,在使用另外一个指针记录他们前面的那个节点。这样就可以很方便的实现节点位置的交换,然后在给三个指针更新值即可。代码入下:
public ListNode swapPairs(ListNode head) {
ListNode pHead = new ListNode(0);
pHead.next = head;
ListNode cur = pHead, next;
while(head != null && head.next != null){
next = head.next;
head.next = next.next;
cur.next = next;
next.next = head;cur = head;
head = head.next;
}
return pHead.next;
}
递归法就更简单了,只需要实现交换两个节点位置的功能即可,代码如下所示:
public ListNode swapPairs1(ListNode head) {
if ((head == null)||(head.next == null))
return head;
ListNode n = head.next;
head.next = swapPairs1(head.next.next);
n.next = head;
return n;
}