24. swap nodes in pairs

题目描述

给一个链表,交换相邻节点, 如 1 -> 2 -> 3 -> 4 => 2 -> 1 -> 4 -> 3,
且不能改变节点中的键值。

题目分析

对于一个偶节点,若它有两个后继节点,则交换这两个后继节点,
然后进入下一个偶节点。

代码

#include <iostream>

struct ListNode {
  int val;
  ListNode* next;
  ListNode(int x) : val(x), next(NULL) {}
};

class Solution {
public:
  ListNode* swapPairs(ListNode* head) {
    ListNode root(0);
    root.next = head;
    ListNode* ptr = &root;
    while (ptr->next != NULL && (ptr->next)->next != NULL) {
      ListNode* tmp = (ptr->next)->next;
      (ptr->next)->next = tmp->next;
      tmp->next = ptr->next;
      ptr->next = tmp;

      ptr = (ptr->next)->next;
    }
    return root.next;
  }
};

总结

1次AC