给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。
eg:
给你这个链表:1->2->3->4->5
当 k = 2 时,应当返回: 2->1->4->3->5
当 k = 3 时,应当返回: 3->2->1->4->5
可以具体把分为如下几步:
- 判断当前链表的长度是否大于k
- 如果大于k,将链表的前k个节点进行翻转
将翻转后的链表尾插到新的链表中。并重复上面的步骤。- 如果当前链表的长度不足k,直接将当前链表尾插到新链表上,结束。
code
ElemSN* flipNode(ElemSN* head,int k){
if(head==NULL||k<=0){
return NULL;
}
int count=0;
ElemSN *p=head,*q=head,*hn=NULL,*tail=NULL,*hTemp=NULL,*tempTail=NULL;
while (head) {
q=head;
count=0;
while(count<k&&q!=NULL){
count++;
q=q->next;
}
if(count==k){
// 链表满足翻转条件
hTemp=NULL;
tempTail=head;
count=0;
while (count<k) {
p=head;
head=head->next;
count++;
p->next=hTemp;
hTemp=p;
}
}else{
hTemp=head;
}
if(hn==NULL){
hn=hTemp;
tail=tempTail;
}else{
tail->next=hTemp;
if(count==k){
tail=tempTail;
}else{
head=NULL;
}
}
}
return hn;
}
网友评论