题目大意:给出一个链表,将链表的首尾节点相邻组成一个新链表。
算法思想:
1.遍历链表,将链表中的节点存放如容器中。
2.遍历容器,交替从容器首尾中取出节点,组成一个链表。
3.去掉添加的头结点。
代码如下:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
void reorderList(ListNode* head) {
if(head==NULL) return ;
ListNode* p=head;
deque<ListNode*> Node;
while(p!=NULL){
cout<<p->val<<endl;
Node.push_back(p);
p=p->next;
}
deque<ListNode*>::iterator pos;
ListNode *wzg=new ListNode(0);
p=wzg;
bool flag=true;
cout<<"size:"<<Node.size()<<endl;
while(!Node.empty()){
if(flag){
p->next=Node.front();
Node.pop_front();
flag=false;
}
else{
p->next=Node.back();
Node.pop_back();
flag=true;
}
p=p->next;
}
if(p!=NULL) p->next=NULL;
head=wzg->next;
delete wzg;
}
};