首页 > 代码库 > LeetCode --- 24. Swap Nodes in Pairs
LeetCode --- 24. Swap Nodes in Pairs
题目链接:Swap Nodes in Pairs
Given a linked list, swap every two adjacent nodes and return its head.
For example,
Given 1->2->3->4, you should return the list as 2->1->4->3.
Your algorithm should use only constant space. You may not modify the values in the list, only nodes itself can be changed.
这道题的要求是交换链表中相邻的节点。要求:使用恒定空间,不允许修改链表中的数值,仅可以改变链表节点本身。
这道题考察的是链表处理,同样还是现在链表前面加个头,便于统一处理链表的所有节点。
假设链表为:
head -> 1 -> 2 -> 3 -> 4 -> NULL。
加头之后为:
h -> 0 -> 1 -> 2 -> 3 -> 4 -> NULL。
可先领p指向要交换节点的第一个节点的前一节点,temp指向要交换节点的第一个节点,即:
h -> 0 -> 1 -> 2 -> 3 -> 4 -> NULL
^ ^
| |
p temp
接下来,要使1和2两个节点交换,只需要交换其指针指向即可,即先将p->next指向节点2:
|-------->|
h -> 0 1 -> 2 -> 3 -> 4 -> NULL
^ ^
| |
p temp
然后temp->next指向节点3:
|-------->|
h -> 0 1 2 -> 3 -> 4 -> NULL
^ |-------->|
| ^
p |
temp
最后再使节点2的next指回节点1:
|-------->|
h -> 0 1 <- 2 3 -> 4 -> NULL
^ |-------->|
| ^
p |
temp
即:
h -> 0 -> 2 -> 1 -> 3 -> 4 -> NULL
^ ^
| |
p temp
接下来再移动p指针到下一要交换节点对的前面(即temp处)即可:
h -> 0 -> 2 -> 1 -> 3 -> 4 -> NULL
^
|
p
进而继续交换节点3和节点4,以此类推,进行循环。。。
时间复杂度:O(n)
空间复杂度:O(1)
1 class Solution
2 {
3 public:
4 ListNode *swapPairs(ListNode *head)
5 {
6 ListNode *h = new ListNode(0), *p = h;
7 h -> next = head;
8
9 while(p -> next != NULL && p -> next -> next != NULL)
10 {
11 ListNode *temp = p -> next;
12 p -> next = temp -> next;
13 temp -> next = p -> next -> next;
14 p -> next -> next = temp;
15 p = temp;
16 }
17
18 return h -> next;
19 }
20 };
转载请说明出处:LeetCode --- 24. Swap Nodes in Pairs
LeetCode --- 24. Swap Nodes in Pairs
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。