LeetCode 24. 两两交换链表中的节点
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定 1->2->3->4, 你应该返回 2->1->4->3.
算法:我们只需要明确如何交换两个结点即可。具体解释见代码。
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* swapPairs(ListNode* head) { ListNode* l=new ListNode(-1); l->next=head;//虚拟头结点指向头结点 auto p=l; while(p){ auto f=p->next;//第一个结点 if(!f) break; auto s=f->next;//第二个结点 if(!s) break; //交换 p->next=s;//虚拟头结点指向第二个(l->2) f->next=s->next;//第一个头结点指向第二个指向的结点(1->3) s->next=f;//第二个结点的指向改为指向第一个(2->1) p=f;//循环下一轮 } return l->next; } };