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

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

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

思路
我们首先需要建立pre、node1、node2和lat四个指针,然后pre->next=node2;node2.next=node1;node1.next=lat.

     -----------
     |         |
h    1 <- 2 -> 3 -> 4
|         |
-----------

listNode.h

#pragma once
#include 
#include 
using namespace std;

/**Definition for singly-linked list.*/
struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(NULL) {}
};

class ListNodeOperate
{
public:
    /*
     * 函数:在链表中插入值
     * 输入:原链表,插入值
     */
    void insertNode(ListNode* p, int i);
    /*
     *函数:输出链表
     *输入:待输出链表
     */
    void coutRes(ListNode* result);
};

listNode.cpp

#include "listNode.h"
void ListNodeOperate::insertNode(ListNode* p, int i)
{
    ListNode* node = new ListNode(1);
    node->val = i;
    node->next = p->next;
    p->next = node;
}

void ListNodeOperate::coutRes(ListNode* result)
{
    ListNode* node = new ListNode(NULL);
    node = result;
    if (node != NULL)
    {
        do
        {
            cout << node->val << " ";
            node = node->next;
        } while (node != NULL);
    }
}

solution

class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
        ListNode* pre = NULL;
        ListNode* Node1 = NULL;
        ListNode* Node2 = NULL;
        ListNode* lat = NULL;

        ListNode* h = new ListNode(-1);
        h->next = head;
        pre = h;

        while (pre->next != NULL && pre->next->next != NULL)
        {
            Node1 = pre->next;
            Node2 = Node1->next;
            lat = Node2->next;

            pre->next = Node2;
            Node2->next = Node1;
            Node1->next = lat;

            pre = Node1;
        }
        return h->next;
    }
};

int main(int argc, char* argv[])
{
    int a[] = { 1, 2, 3, 4 };
    ListNode* test = new ListNode(NULL);
    ListNode* result;
    for (int i : a)
    {
        ListNodeOperate().insertNode(test,i);
    }
    result = Solution().swapPairs(test);
    ListNodeOperate().coutRes(result);
    system("pause");
    return 0;
}

你可能感兴趣的:(24.两两交换链表中的节点)