Leetcode:24.两两交换链表中的节点
题目描述
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/swap-nodes-in-pairs
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:
本题需要用三个指针,循环中分为两个步骤,交换和更新参数,具体说明放在代码当中。
/**
* 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) {
ListNode* dummy = new ListNode(0); //设置哑结点
ListNode *first, *last, *pre = dummy;
dummy->next = head;
while(head&&head->next)
{
//指针指向本次要交换的两个节点
first = head; last = first->next;
//两两交换
pre->next = last;
first->next = last->next;
last->next = first;
//更新pre节点和head
pre = first; head = first->next;
}
return dummy->next;
}
};