力扣24. 两两交换链表中的节点

Posted 幽殇默

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了力扣24. 两两交换链表中的节点相关的知识,希望对你有一定的参考价值。

在这里插入图片描述
题目地址

我这种方法不是正解,因为交换的只是值,真正的指针并没有交换。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
        //ListNode* s1=new ListNode(-1); s1->next=head;
        ListNode* s1=head;
        while(s1)
        {
            if(s1->next==NULL) return head;
            int temp=s1->next->val;
            s1->next->val=s1->val;
            s1->val=temp;
            s1=s1->next->next;
        }
        return head;
    }
};

正解
在这里插入图片描述
注意这里的头指针要指向要交换的两个数字的上一个结点。 即开始指针指向0 将1 2交换后 指针指向1。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
        auto dummy=new ListNode(-1);
        dummy->next=head;
        for(auto p=dummy;p->next&&p->next->next;)
        {
	        auto a=p->next,b=a->next;
	        p->next=b;
	        a->next=b->next;
	        b->next=a;
	        p=a;
        }
        return dummy->next;
    }
};
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
        ListNode* s=new ListNode(-1);
        s->next=head;
        ListNode* ans=s;
        while(s->next&&s->next->next)
        {
            ListNode* a=s->next;
            ListNode* b=a->next;
            s->next=b;
            a->next=b->next;
            b->next=a;
            s=a;
        }
        return ans->next;
    }
};

以上是关于力扣24. 两两交换链表中的节点的主要内容,如果未能解决你的问题,请参考以下文章

力扣24. 两两交换链表中的节点

LeetCode 24. 两两交换链表中的节点

链表

24链表-两两交换链表中的结点

24链表-两两交换链表中的结点

两两交换链表中的节点