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.
思路:这道题主要就是依次进行两个结点的判断,关键因素就是这两个结点的前一个结点,使用变量pRev,pNode,pNext;主要就是对pRev的把握。
/** * 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==NULL||head->next==NULL) return head; ListNode *pNode=head; ListNode *pNext=NULL; ListNode *pRev=head; while(pNode&&pNode->next) { pNext=pNode->next; pNode->next=pNext->next; pNext->next=pNode; if(pRev!=head) pRev->next=pNext; else head=pNext; pRev=pNode; pNode=pNode->next; } return head; } };