[leetcode] 24 Swap Nodes in Pairs(交换链表相邻结点)

来源:互联网 发布:矩阵kvm 编辑:程序博客网 时间:2024/06/06 06:37

(一)迭代法

在处理这种问题时,我们通常加上一个dummy头结点指向head,至于思路很清晰了就是隔一个去交换两个相邻结点,比如1->2->3->4->NULL,我们先通过指针交换1和2,再交换3和4,详细的指针操作可以看下面的图:


class Solution {public:    ListNode* swapPairs(ListNode* head) {       ListNode *dummy=new ListNode(0);   dummy->next=head;   ListNode *prev=dummy,*cur=head;   while(cur&&cur->next)   {          prev->next=cur->next;   cur->next=cur->next->next; //先确定后继    prev->next->next=cur;      prev=cur;   cur=cur->next;      }         return dummy->next;    }};
(二)递归版本

递归一向是以精巧著称,我们只需处理好最基础的一部分,剩下的递归即可。如果读者不是很理解的话,可以手动模拟一下。

class Solution {public:    ListNode *swapPairs(ListNode *head) {       if (head == NULL)            return NULL;       if (head -> next == NULL)            return head;       ListNode *tmp = head -> next;       head -> next = swapPairs(tmp -> next);       tmp -> next = head; // 指向下一部分        return tmp;    }};




1 0