void reorderList(ListNode *head)
{
if(head==NULL|| head->next==NULL|| head->next->next==NULL) return ;
ListNode* p=head;
int l=0;
while(p) p=p->next,l++;//imitate adhoc's code style
p=head;
int i=0;
ListNode* prev;
while(i<l/2) prev=p,p=p->next ,i++;//imitate adhoc's code styleif(l%2==1) prev=p,p=p->next;//odd, p to be (l-1)/2+1 node, prev to be center
ListNode* pnext, *pprev=NULL;
while(p!=NULL)//reverse, pprev, p,pnext
{
pnext=p->next;
p->next=pprev;
pprev=p;
p=pnext;
}
prev->next=NULL;//center link to reversed list node, avoid first part last node point to second part first node, which lead to loop linklist//pprev;
p=head;ListNode* q=pprev, *qnext;
while(q!=NULL&&p!=NULL)
{
pnext=p->next;//record p original next
qnext=q->next;
p->next=q;
q->next=pnext;
p=pnext;
q=qnext;
}
}
void connect(TreeLinkNode *root)
{
if(root==NULL) return;
vector<TreeLinkNode* > vec;
vec.push_back(root);
int current=0;
TreeLinkNode* lastp;
while(current<vec.size())
{
int last=vec.size();//the final one's next oneint i=0;
while(current<last)
{
TreeLinkNode* p=vec.at(current);
if(i>0)
lastp->next=p;//level first one, do not have last
lastp=p;
cout<<p->val;
if(p->left)
vec.push_back(p->left);
if(p->right)
vec.push_back(p->right);
current++;
i++;
}
lastp->next=NULL;//level last next is null
cout<<endl;
}
}
if(start<=rowend)//at least one row, maybe none number left { for(int j=start;j<=colend;j++)//row: start col: start->colend, if col has num, start must be valid spiralnum.push_back(matrix.at(start).at(j)); }
if(start<=colend)//at least one row
{
for(int i=start+1;i<=rowend;i++)//col: colend row:start+1->colend
spiralnum.push_back(matrix.at(i).at(colend));
}
if(start+1<=rowend)//at least two rows
{
for(int j=colend-1;j>=start;j--)//row: rowend col: colend-1->start
spiralnum.push_back(matrix.at(rowend).at(j));
}
if(start+1<=colend)//at least two rows
{
for(int i=rowend-1;i>=start+1;i--)//col: start row: rowend-1->start+1
spiralnum.push_back(matrix.at(i).at(start));
}
vector<int> spiralOrder_Offer(vector<vector<int> > &matrix)
{
int row=matrix.size();//row numvector<int> spiralnum;
if(row<=0) return spiralnum;
int col=matrix.at(0).size();//column numif(col<=0) return spiralnum;
int start=0;//row start, and col start//bool PrintNum=false;while(1)
{
int colend=col-1-start;
int rowend=row-1-start;
if(start>colend || start> rowend)
break;
if(start<=rowend)//at least one row, maybe none number left
{
for(int j=start;j<=colend;j++)//row: start col: start->colend, if col has num, start must be valid
spiralnum.push_back(matrix.at(start).at(j));
}
if(start<=colend)//at least one row
{
for(int i=start+1;i<=rowend;i++)//col: colend row:start+1->colend
spiralnum.push_back(matrix.at(i).at(colend));
}
if(start+1<=rowend)//at least two rows
{
for(int j=colend-1;j>=start;j--)//row: rowend col: colend-1->start
spiralnum.push_back(matrix.at(rowend).at(j));
}
if(start+1<=colend)//at least two rows
{
for(int i=rowend-1;i>=start+1;i--)//col: start row: rowend-1->start+1
spiralnum.push_back(matrix.at(i).at(start));
}
start++;
}
return spiralnum;
}
int EnumGetOneNum(int n)
{
if(n<=0) return0;
int onesum=0;
for(int i=1;i<=n;i++)
{
int maxten=11;//signed int or unsigned int, max 12 digitwhile(i>0)
{
int digit=i/pow(10.0,maxten);
if(digit==1)
onesum++;
i-=digit*pow(10.0,maxten);
maxten--;
}
}
return onesum;
}
int LowToHighDigit_EnumGetOneNum(int n)
{
if(n<=0) return0;
int onesum=0;
for(int i=1;i<=n;i++)
{
int maxten=11;//signed int or unsigned int, max 12 digitwhile(i>0)
{
int digit=i%10;
if(digit==1)
onesum++;
i=i/10;
//int digit=i/pow(10.0,maxten);//if(digit==1)// onesum++;//i-=digit*pow(10.0,maxten);//maxten--;
}
}
return onesum;
}