题目:
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
示例:
给定1->2->3->4
你应该返回2->1->4->3
解题思路:
迭代法
用4个指针来操作,
pre, curr
thisNode,nextNode(用于交换)
- 刚开始头结点的前驱节点pre是没有值的
- 初始化的时候,要把head保存为head->next,否则在循环里不好操作
- 然后进循环里先保存两个节点,然后交换它们
C
struct ListNode* swapPairs(struct ListNode* head){
if(head == NULL || head->next == NULL) {
return head;
}
struct ListNode *pre = NULL;
struct ListNode *curr = head;
head = head->next;
while(curr && curr->next) {
struct ListNode *thisNode = curr;
struct ListNode *nextNode = thisNode->next;
if (pre != NULL) {
pre->next = nextNode;
}
thisNode->next = nextNode->next;
nextNode->next = thisNode;
curr = thisNode->next;
pre = thisNode;
}
return head;
}