【Leetcode】 两两交换链表中的节点
题目链接:两两交换链表中的节点
题意:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
给定 1->2->3->4
, 你应该返回 2->1->4->3
.
题解:这个题建议自己画个图。。
主要步骤大概就以下三步。能想出来,这个题基本就解决了。
1、使新链表节点的ans的下一个节点变成head的下一个节点。
2、使head节点的下一个节点变成head的下下节点。
3、使ans下下节点变成head。
完成这三步再去做一个更新,。ans当前节点更新到head的位置,head往下更新。
代码:
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * ListNode *next; 6 * ListNode(int x) : val(x), next(NULL) {} 7 * }; 8 */ 9 class Solution { 10 public: 11 ListNode* swapPairs(ListNode* head) { 12 if(head == NULL || head->next == NULL) return head; 13 14 ListNode* ans = new ListNode(0); 15 ListNode* res = ans; 16 17 while(head && head->next){ 18 res->next = head->next; 19 head->next = head->next->next; 20 res->next->next = head; 21 22 res = head; 23 head = head->next; 24 } 25 return ans->next; 26 } 27 };