【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 };

 

posted @ 2020-03-17 22:25  甜酒果。  阅读(120)  评论(0编辑  收藏  举报