赞
踩
递归
- class Solution {
- public:
- ListNode* swapPairs(ListNode* head) { //使用了递归,每次做了两个结点的交换并且连接下一个头结点。
- if(head == nullptr || head->next == nullptr)
- return head;
- ListNode* next = head->next;
- head->next = swapPairs(next->next);
- next->next = head;
- return next;每一次返回交换那个头结点。
- }
- };
非递归
- class Solution {
- public:
- ListNode* swapPairs(ListNode* head) {
- ListNode* hhead = new ListNode(0);//用来记住第一个结点,不然后面不知道返回什么。//而且如果不多加一个头结点,前两个交换后找不到第三个连接的结点。因为这里的原序中的第4个结点是找不到的
- hhead->next = head;//后面会发生交换,所以hhead->next肯定要更新。
- ListNode* temp = hhead;//并不想hhead改变。
- while (temp->next&&temp->next->next)
- {
- ListNode* node1 = temp->next;//为了好看一点,可读性,表示原序的第一个结点。
- ListNode* node2 = temp->next->next;//temp->next->next->next写出来也是可以的,但再加一个next就不行了,因为第三个next那里可以为空指针。
- temp->next = node2;
- node1->next = node2->next;//记住了node2-》next,后面才可以改变。
- node2->next = node1;
- temp = node1;
- }
- return hhead->next;
- }
- };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。