LeetCode24- 两两交换链表中的节点
最近全国疫情严重,待在家里没事干,马上又要准备春招了,最近刷刷题,记录一下!再说一句,武汉加油,大家出门记得戴口罩!
1、题目
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
2、思路
建立虚拟头结点p
定义a指针和b指针
第一步虚拟头结点p指向b,a指向b的下一个元素,b指向a
第二步,把p前进一步到a
3、代码
c++
class Solution {
public:
ListNode* swapPairs(ListNode* head) {
//判断边界
if(head == NULL || head->next == NULL){
return head;
}
//定义虚拟头结点,指向头结点
auto dummy=new ListNode(-1);
dummy->next=head;
for(auto p=dummy;p->next&&p->next->next;)
{
//第一步虚拟头结点p指向b,a指向b的下一个元素,b指向a
//第二步,把p前进一步到a
auto a=p->next,b=a->next;
p->next=b;
a->next=b->next;
b->next=a;
p=a;
}
return dummy->next;
}
};
Java
class Solution {
public ListNode swapPairs(ListNode head) {
if(head == null || head.next == null){
return head;
}
//定义虚拟头结点,指向头结点
ListNode dummy=new ListNode(-1);
dummy.next=head;
ListNode p;p=dummy;
while(p.next != null && p.next.next != null) {
ListNode a=p.next,b=a.next;
p.next=b;
a.next=b.next;
b.next=a;
p=a;
}
return dummy.next;
}
}
爱睡觉的小飞猪
发布了38 篇原创文章 · 获赞 46 · 访问量 6万+
私信
关注