leetcode 24. Swap Nodes in Pairs 每两个结点反转一次
程序员文章站
2022-07-03 19:18:07
...
Given a linked list, swap every two adjacent nodes and return its head.
Example:
Given1->2->3->4
, you should return the list as2->1->4->3
.
Note:
- Your algorithm should use only constant extra space.
- You may not modify the values in the list's nodes, only nodes itself may be changed.
思路:交换两个结点 需要知道这两个结点的前一个结点和后一个结点;
所以 需要设置头结点 dummy;需要维护四个变量 pre node1 node2 pNext;
CODE:
/**
* 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)
return nullptr;
ListNode *dummy=new ListNode(0);
dummy->next=head;
//ListNode *cur=dummy;
ListNode *pre=dummy;
while(pre->next&&pre->next->next)
{
ListNode *node1=pre->next;
ListNode *node2=node1->next;
ListNode *pNext=node2->next;//需要的四个结点;
node2->next=node1;
node1->next=pNext;
pre->next=node2;//操作 pre-》2-》1-》pNext
pre=node1;//更新pre指向一个新的位置;
}
return dummy->next;
}
};