这是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 };
贴个结果:
个人总结:
题目简单,思路清晰,可以使用递归方法解决,从后面开始交换,代码会更简洁。
内容来源于网络如有侵权请私信删除
- 还没有人评论,欢迎说说您的想法!