24. Swap Nodes in Pairs

Given a linked list, swap every two adjacent nodes and return its head.

For example,
Given 1->2->3->4, you should return the list as 2->1->4->3.

Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.

  • 好像不夠優雅呀
 class Solution {
 public:
     ListNode* swapPairs(ListNode* head) {
         if (head == nullptr || head->next == nullptr)
             return head;

         ListNode* pAux = new ListNode(0);
         ListNode* pHead = pAux;

         ListNode* pNode = head;
         ListNode* pCur = head->next;

         ListNode* pPre = head;
         ListNode* pNext = nullptr;
         ListNode* pNextNext = nullptr;
         pHead->next = pCur;
         while (pCur != nullptr) {
             pNext = pCur->next;//保存下一個節點

             pCur->next = pPre;//反轉鏈表指向奇數節點
             if (pNext == nullptr) {//如果後面沒有節點直接賦值nullptr結束循環。
                 pPre->next = nullptr;
                 pCur = nullptr;
             }
             else {
                 if (pNext->next == nullptr) {//後面還剩一個節點直接連上就行
                     pPre->next = pNext;
                     pCur = nullptr;
                 }
                 else {
                     pCur = pNext->next;//後面還有兩個節點那就繼續循環
                     pPre->next = pCur;
                     pPre = pNext;
                 }
             }
         }

         return pAux->next;
     }
 };
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章