24. 兩兩交換連結串列中的節點
題目地址 :
Code :
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
//模組 化 處理
ListNode* pre = nullptr ;
ListNode* p1 = head ;
ListNode* p2 = nullptr ;
ListNode* Receive_NewLinkedListHead = nullptr ;
if(head == nullptr )
{
return head ;
}
if(head -> next == nullptr )
{
return head ;
}
p2 = p1 -> next ;
int FindAction = 0 ; // 觀察哨
while(p1 != nullptr && p1->next != nullptr )
{
ListNode* next = p2->next ; // ( next , p->next ) 是否 為 空 指標 尚未 做 判斷
if(FindAction == 0 ) // 首次 處理
{ // 第 一 組 結點 前 沒有 結點 (無 頭 連結串列 時 )
p1->next = next ;
p2->next = p1 ;
Receive_NewLinkedListHead = p2 ;
FindAction = 1 ;
}
else
{
pre->next = p2;
p1->next = next ;
p2->next = p1 ;
}
if(next == nullptr )
{
break ;
}
if(next -> next == nullptr )
{
break;
}
// 注意 更新 連結串列 情況
pre = p1 ;