赞
踩
给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。
你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
输入:head = [1,2,3,4]
输出:[2,1,4,3]
输入:head = []
输出:[]
输入:head = [1]
输出:[1]
struct ListNode* swapPairs(struct ListNode* head){ struct ListNode *newHead = malloc(sizeof(struct ListNode));//创建一个新的结点 struct ListNode *node1,*node2;//指向两个相邻的结点 struct ListNode *p; p=newHead; p->next = head; while(p->next && p->next->next) { node1 = p->next; node2 = p->next->next; p->next = node2; //移动指针p node1->next = node2->next; node2->next = node1; p=node1; } return newHead->next; }
struct ListNode* swapPairs(struct ListNode* head){
if(head == NULL || head->next == NULL)//对特殊情况的处理 链表为空或者只有一个结点
return head;
struct ListNode *node = head->next;//保留第二个结点的信息
head->next = swapPairs(node->next);//第一个结点的后继结点使用递归得到
node->next = head;//第二个结的后继指向第一个结点
return node;//返回第二个结点
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。