leetcode Swap Nodes in Pairs 链表

来源:互联网 发布:事业单位粉笔软件 编辑:程序博客网 时间:2024/05/24 07:12

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.

第90道题了,这个是每一对节点就进行交换,题目说明不能修改list的值,也就是不能只交换数据。

定义了一个新节点newhead,用于返回,还有一个pre节点记录已经反转后的list的末尾,first节点表示是需要交换的第一个节点,second表示的是需要交换的第二个节点。

大概思路就是先把second的next给first的next,然后second指向first,把second接到pre的后面,用pre记录first,再更新first和second的位置

class Solution {public:ListNode* swapPairs(ListNode* head) {if (!head) return NULL;ListNode*newhead, *first = head, *second = head->next, *pre = NULL;newhead = second;if (!second) return head; //只有一个直接返回headwhile (second)//有第二个可以进行交换{first->next = second->next;//把second指向的给first指向second->next = first;//second指向firstif (pre!=NULL)//第一次没有pre{pre->next = second;}pre = first;//把带处理的第一个接到pre后面if (first->next)//有带处理的{first = first->next;second = first->next;}else{return newhead;//后面已经没值了直接返回}}return newhead;}};


0 0
原创粉丝点击