赞
踩
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
示例:
给定 1->2->3->4
, 你应该返回 2->1->4->3
.
说明:
思路:
1.p代表上一对交换完成的节点中的后者。l代表即将进行交换节点对的左节点,r代表即将进行交换节点对的右节点。
2.首先将l指向r的下一个节点;在将r指向l;最后将p指向r。即完成当前节点对的交换。
- /**
- * 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* l=head;//定义需要交换的左右节点
- ListNode* r=l->next;
- ListNode* p;
- l->next=r->next;//交换第一二个节点
- r->next=l;
- head=r;//首节点赋值为第二个节点
- p=l;//p赋值为第一对交换成功的右节点
- while(l->next&&l->next->next){//如果剩余节点为0或1则返回head,否则进入循环
- l=l->next;//转换到下一节点对
- r=l->next;
- l->next=r->next;//交换节点l,r
- r->next=l;
- p->next=r;
- p=l;
- }
- return head;
- }
- };
大婶结发:原理一样,不过看着更简洁,momomo
- /**
- * 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 **pp = &head, *a, *b;
- while ((a = *pp) && (b = a->next)) {
- a->next = b->next;
- b->next = a;
- *pp = b;
- pp = &(a->next);
- }
- return head;
- }
- };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。