Swap Nodes in Pairs
程序员文章站
2022-07-03 16:58:42
...
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.
这道题是让我们翻转链表上相邻的两个节点而不是节点上的值。其实解法很简单,就是用两个指针分别指向当前节点和下一个节点,但是实现中需要考虑细节需要注意。
1.链表只有一个节点或者为空的时候,直接返回链表本身
2.链表为奇数个数时,需要注意访问到NULL节点,具体看代码
/**
* 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) return NULL;
// last 指向cur的下一个节点,pre指向cur上一个节点
ListNode* cur=head, *new_head=head->next, *last=NULL, *pre=NULL;
if (!head->next) return head;
while(cur)
{
last=cur->next;
if (last)
{
cur->next = last->next;
last->next=cur;
if (pre) pre->next=last;
pre=cur;
}
cur=cur->next;
}
return new_head;
}
};
上一篇: Web Worker详解