赞
踩
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
迭代的方法:
思考:给定链表的样子如下
有时候需要在最前面建立一个dummy结点的原因是当原来的头结点发生了变换,比如被删除了,或者被交换位置了,就需要记录新的头结点的位置。
pre->next->next = t->next;
t->next = pre->next;
pre->next = t;
pre = t->next;
整体代码:
- class Solution {
- public:
- ListNode* swapPairs(ListNode* head) {
- if(!head || !head->next) return head;
- ListNode* dummy = new ListNode(-1),*pre = dummy;
- dummy->next = head;
- while(pre->next && pre->next->next){
- ListNode*t = pre->next->next;
- pre->next->next = t->next;
- t->next = pre->next;
- pre->next = t;
- pre = t->next;
- }
- return dummy->next;
- }
- };
递归的方法:
递归就很简单,注意几点:
- class Solution {
- public:
- ListNode* swapPairs(ListNode* head) {
- if(!head || !head->next) return head;
- ListNode* first = head;
- ListNode* second = head->next;
- head = second;
- first->next = swapPairs(second->next);
- second->next = first;
- return head;
- }
- };
总结:有时候需要在最前面建立一个dummy结点的原因是:当原来的头结点发生了变换,比如被删除了,或者被交换位置了,就需要记录新的头结点的位置;在进行链表变换的时候,要注意“断链”的情况
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。