两两交换链表中的节点
2017-03-26 21:59
330 查看
问题描述:
给一个链表,两两交换其中的节点,然后返回交换后的链表。样例:
给出1->2->3->4,
你应该返回的链表是
2->1->4->3。
实现思路:
首先这个链表只能交换偶数个数据,如果有奇数个数据则最后一个数据不进行交换。做一个循环将数据两个两个的交换,每交换完一次都要往后迭代。实现代码:
/*** Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
/**
* @param head a ListNode
* @return a ListNode
*/
ListNode* swapPairs(ListNode* head) {
// Write your code here
if (head== NULL || head->next== NULL)return head;//判断链表为空或者只有一个数据
ListNode *p;
ListNode *q;
p= head;
q= p->next;
int a;
while (q!= NULL &&p!= NULL) {
a= p->val;
p->val= q->val;
q->val= a;
if (q->next== NULL)break;//判断后面是否还有元素
p= q->next;
if (p->next== NULL)break;//判断后面的元素是否只剩下一个
q= p->next;
}
return head;
}
};
感想:
原本想的是直接将链表两两交换,但是 这个太麻烦而且得需要好几个指针储备,但是如果不动链表顺序的话只能就交换数据,这样就会显得方便而且算法比较简单。但是在实现过程经常漏掉细节,譬如循环里面的判断语句没有的话就是出现runtime error 这个错误,如果链表后面明明没有数据,但是偏偏要用后面的数据,这样就是就会出错。相关文章推荐
- 两两交换链表中的节点
- LintCode:两两交换链表中的节点
- Swap Nodes in Pairs 链表两两交换节点@LeetCode
- 两两交换链表中的节点 - C++
- 【LintCode 简单】451. 两两交换链表中的节点
- 两两交换链表中的节点-LintCode
- 两两交换链表中的节点
- 两两交换链表中的节点
- 两两交换链表中的节点
- 作业4.451:两两交换链表中的节点
- 两两交换链表中的节点
- 两两交换链表中的节点
- Java实现-两两交换链表中的节点
- 两两交换链表中的节点
- 451. 两两交换链表中的节点(swap-nodes-in-pairs)(c++)----lintcode面试题之链表
- [LintCode 451] 两两交换链表中的节点(Python)
- 两两交换链表中的节点
- LintCode 两两交换链表中的节点
- lintcode——两两交换链表中的节点
- 两两交换链表中的节点