列表

详情


NC186. 两两交换链表的节点

描述

给你一个链表,请你两两交换相邻节点,你需要真正交换节点本身,而不是修改节点的值。

两两交换示例:
链表    :1->2->3->4
交换后 :2->1->4->3


链表    :1->2->3
交换后: 2->1->3

数据范围:链表长度满足 , 链表上的值满足

示例1

输入:

{1,2,3,4}

输出:

{2,1,4,3}

示例2

输入:

{1,2,3}

输出:

{2,1,3}

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 2ms, 内存消耗: 408KB, 提交时间: 2021-12-27

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 *	ListNode(int x) : val(x), next(nullptr) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param head ListNode类 
     * @return ListNode类
     */
    ListNode* swapLinkedPair(ListNode* head) {
        // write code here
        if (!head || !head->next) return head;
        ListNode* tmp = head->next->next;
        ListNode* pre = head;
        ListNode* bef = head->next;
        ListNode* cur = nullptr;
        ListNode* res = nullptr;
        bef->next = pre;
        pre->next = tmp;
        cur = pre;
        pre = tmp;
        res = bef;
        if (!pre) return res;
        bef = tmp->next;
        while (bef)
        {
            tmp = bef->next;
            cur->next = bef;
            bef->next = pre;
            cur = pre;
            pre = tmp;
            if (!tmp) break;
            bef = tmp->next;
        }
        cur->next = pre;
        return res;
    }
};

C 解法, 执行用时: 3ms, 内存消耗: 308KB, 提交时间: 2022-06-30

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param head ListNode类 
 * @return ListNode类
 */
struct ListNode* swapLinkedPair(struct ListNode* head ) {
    // write code here
    if(head==NULL||head->next==NULL)
        return head;
    struct ListNode* p=head->next;
    struct ListNode* r=p->next;
    p->next=head;
    head->next=swapLinkedPair(r);
    head=p;
    return head;
}

C++ 解法, 执行用时: 3ms, 内存消耗: 320KB, 提交时间: 2022-06-30

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 *	ListNode(int x) : val(x), next(nullptr) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param head ListNode类 
     * @return ListNode类
     */
    ListNode* swapLinkedPair(ListNode* head) {
        // write code here
        if(head==nullptr||head->next==nullptr)
            return head;
        ListNode* tail=head->next->next;
        ListNode* new_head=head->next;
        new_head->next=head;
        head->next=swapLinkedPair(tail);
        return new_head;
        
    }
};

C 解法, 执行用时: 3ms, 内存消耗: 384KB, 提交时间: 2022-01-25

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 * };
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param head ListNode类 
 * @return ListNode类
 */
struct ListNode* swapLinkedPair(struct ListNode* head ) {
    // write code here

    if(!head || !head->next)
        return head;

    struct ListNode *cur, *n, *temp, *pre_cur, *new;
    new = n = head->next;
    pre_cur = cur = head;
    temp = NULL;
    while(cur && n)
    {
        temp = n->next;//get the next tow first
        pre_cur->next = n;//make pre_cur point to next two second
        n->next = cur;//exchange
        cur->next = temp;//exchange
       
        pre_cur = cur;//back cur to pre_cur,make it be real
        cur = temp;//change cur to next two first
        if(!cur || !cur->next)
            break;
        n = cur->next;//get next two second
    }
    
    return new;
}

C++ 解法, 执行用时: 3ms, 内存消耗: 384KB, 提交时间: 2021-11-29

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 *	ListNode(int x) : val(x), next(nullptr) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param head ListNode类 
     * @return ListNode类
     */
    ListNode* swapLinkedPair(ListNode* head) {
        // write code here
        
        ListNode guard(0);
        guard.next=head;
        ListNode* prev=&guard;
        while(head) {
            head=head->next;
            if(head) {
                prev->next->next=head->next;
                head->next=prev->next;
                prev->next=head;
                prev=head->next;
                head=prev->next;
            }
        }
         
        return guard.next;        
        
    }
};

上一题