Leetcode 24:两两交换链表中的节点
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
- 1
说明:
- 你的算法只能使用常数的额外空间。
- 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
思路:head指针每次跳两次,然后设置两个指针p1,p2,使得p1=head,p2=head->next;然后p->next=p2,p=p->next,p->next=p1,p=p->next,p->next=head
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next) {} * }; */ class Solution { public: ListNode* swapPairs(ListNode* head) { ListNode ret; ret.next=head; ListNode *p = &ret; ListNode *p1; ListNode *p2; while(head!=NULL&&head->next!=NULL) { p1=head; p2=head->next; head=p2->next; p->next=p2; p=p->next; p->next=p1; p=p->next; p->next=head; } return ret.next; } };
联系方式:emhhbmdfbGlhbmcxOTkxQDEyNi5jb20=