voidReverseList(LinkList head){assert(head !=NULL);if(head->next ==NULL|| head->next->next ==NULL){return;}
ListNode* pre =NULL,*s =NULL;
ListNode* p = head->next;while(p !=NULL){
s = p;
p = p->next;
s->next = pre;
pre = s;}
head->next = pre;}
单链表逆置方法2
使用两个指针(头插法)
时间复杂度:O(n)
空间复杂度:O(1)
voidReverseList(LinkList head){assert(head !=NULL);if(head->next ==NULL|| head->next->next ==NULL){return;}
ListNode* s =NULL,* p = head->next;
head->next =NULL;while(p !=NULL){
s = p;
p = p->next;
s->next = head->next;
head->next = s;}}
单链表逆置方法3
用栈实现(使用一个指针)
时间复杂度:O(n)
空间复杂度:O(n)
voidReverseList(LinkList head){assert(head !=NULL);if(head->next ==NULL|| head->next->next ==NULL){return;}int len 0;
ListNode* p = head->next;while(p !=NULL){
len++;
p = p->next;}int* stack =(int*)malloc(sizeof(int)* len);int top =-1;
p = head->next;while(p !=NULL){
top +=1;
stack[top]= p->data;
p = p->next;}
p = head->next;while(p !=NULL){
p->data = stack[top];
top = top -1;
p = p->next;}free(stack);
stack =NULL;}