题目描述:
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。
解题思路:
为了方便寻找返回的头节点,我们新建一个空的节点作为链表的第一个节点,使其next指针始终指向实际链表的第一个节点。
为了做链表的节点交换,我们创建一个tmp指针作为交换的中间介质。设Node1 = head,Node2 = head->next;
我们使tmp->next =Node2;相邻节点交换后,Node1应指向Node2的下一个节点,所以Node1->next = Node2->next;
Node2 ->next = Node1;完成节点交换。此时移动tmp指针,tmp = Node1;进行下一轮交换。
代码实现:
class Solution { public: ListNode* swapPairs(ListNode* head) { ListNode* _dummy = new ListNode(); _dummy->next = head; ListNode* tmp = _dummy; ListNode* cur=head; //ListNode* pur=head->next; while(cur!=nullptr && cur->next!=nullptr) { ListNode* Node1 = cur ; ListNode* Node2 =cur->next; tmp->next =Node2; Node1->next = Node2->next; Node2->next = Node1; tmp = Node1; //Node1 = Node2; cur=cur->next; } return _dummy->next; } };标签:ListNode,next,链表,Node1,节点,Node2,LeetCode From: https://www.cnblogs.com/kknothing/p/17134526.html