1.问题描述
给定无序链表和一整数K,假设链表为1->2->3->4->5->6>7,K=4,
那么返回以K为中心两边都反转的链表,应该为5->6>7->4->3->2->1
2.解决方案
1.先按反转链表走,走到4的时候停下来,这时已经得到了链表4->3->2->1,并且记录5这个节点
2.从5开始遍历到7,这时候把7->next=4,这样5->6>7->4->3->2->1,就形成了
3.实现起来稍微有一点难度吧,比如传指针要传引用,反转时别忘了分析边界情况等
#include <iostream>
using namespace std;
class Node{
public:
int val;
Node* next;
Node(){}
Node(int val,Node * next){
this->val=val;
this->next=next;
}
};
Node* method(Node*& head,int k){
Node* p1= nullptr;
Node* p2=head;
while(p2->val!=k){
Node* t=p2->next;
p2->next=p1;
p1=p2;
p2=t;
}
//很重要记录K值的后一个节点
head=p2->next;
//反转K这个节点,这个千万注意分析边界值,否则会忘了这个反转
p2->next=p1;
return p2;
}
int main() {
Node* head=new Node(1,new Node(2,new Node(3,new Node(4, new Node(5,new Node(6, nullptr))))));
Node* t=method(head,4);
//遍历找到7,并且7->next=4
Node* head1=head;
while(head1->next!= nullptr){
head1=head1->next;
}
head1->next=t;
//遍历输出链表
while(head!= nullptr){
cout<<head->val<<" ";
head=head->next;
}
return 0;
}