本文最后更新于:2022年8月29日 晚上
                
              
            
            
              给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例 1:

|  | 输入:head = [1,2,3,4]输出:[2,1,4,3]
 
 | 
示例 2:
示例 3:
提示:
- 链表中节点的数目在范围 [0, 100]内
- 0 <= Node.val <= 100
进阶:你能在不修改链表节点值的情况下解决这个问题吗?(也就是说,仅修改节点本身。)
Solution
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 
 | 
 
 
 
 
 
 
 
 
 
 class Solution {
 public:
 ListNode* swapPairs(ListNode* head) {
 if(!head || !head->next) return head;
 ListNode* dummyHead = new ListNode(-1, head);
 ListNode* p = dummyHead;
 while(p->next && p->next->next){
 ListNode* node1 = p->next;
 ListNode* node2 = node1->next;
 ListNode* next = node2->next;
 node1->next = next;
 node2->next = node1;
 p->next = node2;
 p = node1;
 }
 ListNode* ret = dummyHead->next;
 delete dummyHead;
 return ret;
 }
 };
 
 
 | 
java
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 
 | 
 
 
 
 
 
 
 
 
 class Solution {
 public ListNode swapPairs(ListNode head) {
 if (head == null || head.next == null) {
 return head;
 }
 ListNode dummyHead = new ListNode(-1, head);
 ListNode p = dummyHead;
 while (p.next != null && p.next.next != null) {
 ListNode node1 = p.next;
 ListNode node2 = p.next.next;
 ListNode tmp = node2.next;
 p.next = node2;
 node2.next = node1;
 node1.next = tmp;
 p = node1;
 }
 return dummyHead.next;
 }
 }
 
 | 
|  | class Solution {public ListNode swapPairs(ListNode head) {
 if (head == null || head.next == null) {
 return head;
 }
 ListNode node = head.next;
 ListNode rNode = swapPairs(node.next);
 
 node.next = head;
 head.next = rNode;
 return rNode;
 }
 }
 
 |