题意:交换链表中每两个相邻节点,不能修改节点的val值。
分析:递归。如果以第三个结点为头结点的链表已经两两交换完毕(这一步递归实现---swapPairs(head -> next -> next)),则接下来,只需交换前两个节点,再将第一个节点的next指向“以第三个结点为头结点的链表两两交换后”的链表。
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* swapPairs(ListNode* head) { if(head == NULL || head -> next == NULL) return head; ListNode *second = head -> next; ListNode *third = head -> next -> next; second -> next = head; head -> next = swapPairs(third); return second; } };