【LeetCode】Swap Nodes in Pairs(两两交换链表中的节点)

这是LeetCode里的第24题。

题目要求:

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

示例:

给定1->2->3->4, 你应该返回2->1->4->3.

说明:

  • 你的算法只能使用常数的额外空间。
  • 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

这道题还是很简单的,题目说明也很清晰。画画图就能完成题目了。

设计思路:

首先是判断链表是否为空(被空链表弄出了潜意识),然后两节点,一个front前节点,一个back后节点。再一个节点记录他们的前节点,以便于连接。,就是这样:

/**
 * 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)return head;
        if(head->next==NULL)return head;
        ListNode *front,*back,*r;
        front=head;back=head->next;r=NULL;
        while(front!=NULL&&back!=NULL){
            if(front==head){//头节点特殊对待!
                front->next=back->next;
                back->next=front;
                head=back;
            }
            else{
                front->next=back->next;
                back->next=front;
                r->next=back;
            }
            r=front;
            front=r->next;
            if(front==NULL)break;
            back=front->next;
        }
        return head;
    }
};

贴个结果:

个人总结:

题目简单,思路清晰,可以使用递归方法解决,从后面开始交换,代码会更简洁。

猜你喜欢

转载自blog.csdn.net/ecysakura/article/details/84672617