【要求】 如果链表长度为N,时间复杂度要求为O(N),额外空间 复杂度要求为O(1)
思路一:创建一个新的节点指向第一个节点,以这个节点为头,采用头插法,将链表的所有节点插入
void insert_head(Node*p, Node*obj){
obj->_next = p->_next;
p->_next = obj;
}
void reverse(Node*&p){
Node*temp = new Node;
temp->_next = NULL;
Node*obj = p;
Node*obj2 = p;
while (obj != NULL){
obj2 = obj->_next;
insert_head(temp, obj);
obj = obj2;
}
p = temp->_next;
delete temp;
temp = NULL;
}
思路二:采用三指针
void reverse2(Node*&p){
Node*p1 = NULL;
Node*p2 = NULL;
Node*p3 = p;
while (p3){
p2 = p3->_next;
p3->_next = p1;
p1 = p3;
p3 = p2;
}
p = p1;
}