[C++]LeetCode: 109 Swap Nodes in Pairs (交换相邻节点位置)

题目:

Given a linked list, swap every two adjacent nodes and return its head.

For example,

Given 1->2->3->4, you should return the list as 2->1->4->3.

Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.

思路:

利用插入的办法,交换两个节点。维护一个pre节点,表示插入的前一个节点。维护一个cur节点,表示要插入的节点。同时构造一个虚拟头结点dummyhead,维护链表的头结点。

Attention:

1. 如果链表为空,或者只有一个节点,返回链表。

if(head == NULL || head->next == NULL) return head;

2. 维护三个节点。

ListNode* dummyhead = new ListNode(0);
dummyhead->next = head;
ListNode* cur = head;
ListNode* pre = dummyhead;

3. 注意判断当cur本身指向最后一个节点时,也不进行处理。

while(cur != NULL && cur->next != NULL)

复杂度:O(N)

AC Code:

/**
 * 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* dummyhead = new ListNode(0);
        dummyhead->next = head;
        ListNode* cur = head;
        ListNode* pre = dummyhead;

        if(head == NULL || head->next == NULL) return head;
        while(cur != NULL && cur->next != NULL)
        {
            cur = cur->next;
            ListNode* tmp = cur->next;    //保存插入节点的后一个结点
            cur->next = pre->next;        //将cur节点插入
            pre->next = cur;
            pre = cur->next;              //移动pre到下一个插入位置
            cur->next->next = tmp;        //连接交换后的节点和插入节点的后一个节点
            cur = tmp;                    //移动cur节点
        }
        return dummyhead->next;
    }
};
时间: 2024-10-11 17:08:04

[C++]LeetCode: 109 Swap Nodes in Pairs (交换相邻节点位置)的相关文章

【LeetCode】Swap Nodes in Pairs

题目 Given a linked list, swap every two adjacent nodes and return its head. For example, Given 1->2->3->4, you should return the list as 2->1->4->3. Your algorithm should use only constant space. You may not modify the values in the list,

[LeetCode] 024. Swap Nodes in Pairs (Medium) (C++/Python)

索引:[LeetCode] Leetcode 题解索引 (C++/Java/Python/Sql) Github: https://github.com/illuz/leetcode 024. Swap Nodes in Pairs (Medium) 链接: 题目:https://oj.leetcode.com/problems/swap-nodes-in-pairs/ 代码(github):https://github.com/illuz/leetcode 题意: 把一个链表中的每一对节点对换

【LeetCode】Swap Nodes in Pairs 链表指针的应用

题目:swap nodes in pairs <span style="font-size:18px;">/** * LeetCode Swap Nodes in Pairs * 题目:输入一个链表,要求将链表每相邻的两个节点交换位置后输出 * 思路:遍历一遍就可以,时间复杂度O(n) * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * Li

leetCode 24. Swap Nodes in Pairs 链表

24. Swap Nodes in Pairs Given a linked list, swap every two adjacent nodes and return its head. For example,Given 1->2->3->4, you should return the list as 2->1->4->3. Your algorithm should use only constant space. You may not modify the

【LeetCode】Swap Nodes in Pairs (3 solutions)

Swap Nodes in Pairs Given a linked list, swap every two adjacent nodes and return its head. For example,Given 1->2->3->4, you should return the list as 2->1->4->3. Your algorithm should use only constant space. You may not modify the val

leetCode 24. Swap Nodes in Pairs (双数交换节点) 解题思路和方法

Swap Nodes in Pairs Given a linked list, swap every two adjacent nodes and return its head. For example, Given 1->2->3->4, you should return the list as 2->1->4->3. Your algorithm should use only constant space. You may not modify the va

LeetCode 024 Swap Nodes in Pairs

题目描述:Swap Nodes in Pairs Given a linked list, swap every two adjacent nodes and return its head. For example,Given 1->2->3->4, you should return the list as 2->1->4->3. Your algorithm should use only constant space. You may not modify th

leetcode:Swap Nodes in Pairs

Given a linked list, swap every two adjacent(相邻的) nodes and return its head. For example,Given 1->2->3->4, you should return the list as 2->1->4->3. Your algorithm should use only constant space. You may not modify the values in the list

(Java) LeetCode 24. Swap Nodes in Pairs —— 两两交换链表中的节点

Given a linked list, swap every two adjacent nodes and return its head. Example: Given 1->2->3->4, you should return the list as 2->1->4->3. Note: Your algorithm should use only constant extra space. You may not modify the values in the