题目描述
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
解题思路
- leetcode 链表题目中,链表结构体都是没有头结点的。每次我都会自动构造一个头结点。
- 链表题目其实都不难,画画图基本都能够解出来。
本题目比较简单。
构造三个指针 pre,p,q,分别指向待交换结点的前一个结点、待交换结点的第一个结点和待交换结点的第二个结点,调整指针指向即可。
实现代码
ListNode* swapPairs(ListNode* head)
{
ListNode* phead = new ListNode(-1);
phead->next = head;
ListNode* pre = phead,*p = phead->next;
ListNode* q;
while(p && p->next)
{
q = p->next;
p->next = q->next;
q->next = p;
pre->next = q;
pre = p;
p = p->next;
}
return phead->next;
}