LeetCode-24-Swap Nodes in Pairs(链表)-Medium

链表相邻元素交换算法详解
本文详细介绍了如何在不分配额外内存的情况下,通过修改指针指向实现链表中相邻元素的交换。包括核心概念解释、代码实现及具体步骤。

题意理解:

交换链表中相邻的两个元素,如原链表为a->b->c->d,修改为b->a->d->c;


题目分析:

1. 不能重新分配多余内存,即只修改指针指向,不增加新的节点内容;

2. 标示要处理的两个相邻元素位置p1,p2,以及p1之前的位置pPre和p2之后的位置pNext;

3. 根据题目要求交换对应位置指针的指向内容;


解题代码:

/**
 * 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* ans=head;
        
        int size=0;
        ListNode* pCur=head;
        while(pCur!=NULL){
            size++;
            pCur=pCur->next;
        }
        pCur=head;
        
        if(size<=1){
            return ans;
        }
        
        ListNode* pPre=new ListNode(0);
        ans=pPre;
        ListNode* p1;
        ListNode* p2;
        ListNode* pNext;
        
        for(int i=0; i<size; i+=2){
            if(i==0){
                pNext=head->next->next;
                p1=head;
                p2=head->next;
                
            }
            
            pPre->next=p2;
            p2->next=p1;
            p1->next=pNext;
            
            if(i+2>=size-1){
                break;
            }
            
            pPre=p1;
            p1=pPre->next;
            p2=p1->next;
            pNext=p2->next;
            
        }
        
        return ans->next;
    }
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值