不说废话,先贴上代码
#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;
struct ListNode
{
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
class Solution_024_SwapNodesinPairs
{
public:
ListNode* swapPairs(ListNode* head)
{
if (head == nullptr || head->next == nullptr)
{
return head;
}
ListNode dummy(-1);
dummy.next = head;
for (ListNode *prev = &dummy, *cur = prev->next, *next = cur->next; next; prev = cur, cur = cur->next, next = cur? cur->next:nullptr)
{
prev->next = next;
cur->next = next->next;
next->next = cur;
}
return head->next;
}
};分析过程:
本体设置了dummy结点,因为有了dummy之后,所有的节点都变成拥有前置节点的节点了。所以就不用担心处理头节点这个特殊情况了。
初始状态:
经过第一轮循环后,
实际上节点的顺序是:已经交换了头两个结点的顺序了
根据for循环的第三个条件
prev = cur, cur = cur->next, next = cur? cur->next:nullptr
以此类推
本文介绍了一种链表节点成对交换的算法实现,通过引入哑节点简化处理流程,避免了对头节点特殊处理的问题。文章提供了详细的代码示例及步骤说明。
266

被折叠的 条评论
为什么被折叠?



