美文网首页
24.两两交换链表中的节点

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

作者: HITZGD | 来源:发表于2018-10-18 13:18 被阅读0次

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

    示例:
    给定 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 <cstddef>
    #include <iostream>
    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.两两交换链表中的节点

          本文链接:https://www.haomeiwen.com/subject/htgjzftx.html