题目描述
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->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) {
if(head == nullptr)
return nullptr;
ListNode* dummyHead = new ListNode(-1);
dummyHead->next = head;
ListNode* pPre = dummyHead;
ListNode* pNode = dummyHead->next;
while(pNode != nullptr){
ListNode* pNext = pNode->next;
if(pNext == nullptr)
break;
ListNode* pTemp = pNext->next;
pPre->next = pNext;
pNext->next = pNode;
pNode->next = pTemp;
pPre = pNode;
pNode = pTemp;
}
return dummyHead->next;
}
};
本文介绍了一种链表节点的两两交换算法,通过多指针技巧实现节点的实际交换,而非仅改变节点值。示例代码展示了如何使用虚拟头结点简化边界条件处理,确保链表正确交换并返回结果。
2705

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



