Given a linked list, swap every two adjacent nodes and return its head.
You may not modify the values in the list's nodes, only nodes itself may be changed.
Example:
Given 1->2->3->4, you should return the list as 2->1->4->3.---------------------------------------------------------------------------中文大意是两两交换其中相邻的结点。有非递归和递归的解法,在非递归的解法上,要画下图,辅助理解。C++代码:非递归: /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* swapPairs(ListNode* head) { ListNode *dummy = new ListNode(-1),*cur = dummy; cur->next = head; while(cur->next && cur->next->next){ ListNode *t = cur->next->next; cur->next->next = t->next; t->next = cur->next; cur->next = t; cur =cur->next->next; } return dummy->next; } };
递归:
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* swapPairs(ListNode* head) { if(!head || !head -> next){ return head; } ListNode *t = head->next; head->next = swapPairs(head->next->next); t->next = head; return t; } };
参考博客:http://www.cnblogs.com/grandyang/p/4441680.html
转载于:https://www.cnblogs.com/Weixu-Liu/p/10704144.html
相关资源:JAVA上百实例源码以及开源项目