欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

两两交换链表的结点

程序员文章站 2022-05-06 11:01:24
...

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

你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
两两交换链表的结点
迭代法
两两交换链表的结点

/**
 * 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) {

        ListNode *dummy = new ListNode(0);
        ListNode * preNode = dummy;
        preNode->next = head;  

        while(head && head->next)
        {
             // Nodes to be swapped
            ListNode *firstNode = head;
            ListNode *secondNode = head->next;

            // Swapping
            preNode->next = secondNode;
            firstNode->next = secondNode->next;
            secondNode->next = firstNode;

            //for next swap
            preNode = firstNode;
            head = firstNode->next;

        }

        return dummy->next;
    }
};