解法一:交换指针
public ListNode swapPairs(ListNode head) {
if (head == null || head.next == null) {
return head;
}
ListNode newHead = head.next;
ListNode cur = head;
ListNode next = cur.next;
ListNode temp = null;
while (next != null) {
temp = next.next;
cur.next = next.next;
next.next = cur;
if (temp == null) {
break;
}
if (temp.next != null) {
cur.next = temp.next;
}
cur = temp;
next = cur.next;
}
return newHead;
}
解法二:交换value
因为给出的ListNode有value值,其实只交换Node的value值更简单,不必处理指针的问题,两者执行结果也差不多:
public ListNode swapPairs(ListNode head) {
if (head == null || head.next == null) {
return head;
}
ListNode cur = head;
ListNode next = cur.next;
while (next != null) {
cur.val = cur.val + next.val;
next.val = cur.val - next.val;
cur.val = cur.val - next.val;
cur = next.next;
next = cur;
if (null != cur) {
next = cur.next;
}
}
return head;
}
?
|