【leetcode】Swap Nodes in Pairs (middle)
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.
//start time = 9:54 //end time = 10:16 #include <iostream> #include <vector> #include <algorithm> #include <queue> #include <stack> using namespace std; struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; class Solution { public: ListNode *swapPairs(ListNode *head) { if(head == NULL || head->next == NULL) return head; //头指针转换 ListNode * newhead = head->next; head->next = newhead->next; newhead->next = head; ListNode * pre = newhead->next; //之前转换完的最后一个 ListNode * cur = NULL; //一对中的前一个 ListNode * next = NULL;//一对中的后一个 while(pre->next != NULL && pre->next->next != NULL) { cur = pre->next; next = cur->next; pre->next = next; cur->next = next->next; next->next = cur; pre = cur; } return newhead; } };
发现多出了c的选项 用c写的时候 ListNode前面要加 struct 修饰 而C++不用 注意区别 时间上C需要1ms 而C++需要6ms
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode *swapPairs(struct ListNode *head) { if(head == NULL || head->next == NULL) return head; //头指针转换 struct ListNode * newhead = head->next; head->next = newhead->next; newhead->next = head; struct ListNode * pre = newhead->next; //之前转换完的最后一个 struct ListNode * cur = NULL; //一对中的前一个 struct ListNode * next = NULL;//一对中的后一个 while(pre->next != NULL && pre->next->next != NULL) { cur = pre->next; next = cur->next; pre->next = next; cur->next = next->next; next->next = cur; pre = cur; } return newhead; }