这是LeetCode里的第24题。

题目要求:

给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。

示例:

给定1->2->3->4, 你应该返回2->1->4->3.

说明:

  • 你的算法只能使用常数的额外空间。
  • 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。

这道题还是很简单的,题目说明也很清晰。画画图就能完成题目了。

设计思路:

首先是判断链表是否为空(被空链表弄出了潜意识),然后两节点,一个front前节点,一个back后节点。再一个节点记录他们的前节点,以便于连接。,就是这样:

算法代码:

 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)return head;
13         if(head->next==NULL)return head;
14         ListNode *front,*back,*r;
15         front=head;back=head->next;r=NULL;
16         while(front!=NULL&&back!=NULL){
17             if(front==head){//头节点特殊对待!
18                 front->next=back->next;
19                 back->next=front;
20                 head=back;
21             }
22             else{
23                 front->next=back->next;
24                 back->next=front;
25                 r->next=back;
26             }
27             r=front;
28             front=r->next;
29             if(front==NULL)break;
30             back=front->next;
31         }
32         return head;
33     }
34 };

贴个结果:

个人总结:

题目简单,思路清晰,可以使用递归方法解决,从后面开始交换,代码会更简洁。

内容来源于网络如有侵权请私信删除
你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!