给定一个单链表 L 的头节点 head ,单链表 L 表示为: L0 → L1 → … → Ln-1 → Ln 。请将其重新排列后变为:L0 → Ln → L1 → Ln-1 → L2 → Ln-2 → …不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。
思路:用结构体数组保存元素,方便访问指定元素。
void reorderList(struct ListNode* head){
struct ListNode*arr[50000];//定义结构体数组存储链表
struct ListNode*node=head;
int n=0;//计算链表元素个数
while(node!=NULL){
arr[n++]=node;
node=node->next;
}
int i=0,j=n-1;//数组的开头和结尾
while(i<j){//交错放置元素
arr[i]->next=arr[j];
i++;
if(i==j){
break;
}
arr[j]->next=arr[i];
j--;
}
arr[i]->next=NULL;
}