思路:设三个指针,画图求解
n1置空,n2置为头节点,n3置为头节点的下一个节点。
步骤:将n2的next指向n1,再n1放到n2的位置,n2放到n3的位置,循环到最后一个指针的指向反转,此时n2为空,n3为未知区域,因此再n3移动时,要加一个if语句判空,不然代码会出现错误,最后头节点变为了n1,因此时返回n1结点。
struct ListNode* reverseList(struct ListNode* head) { //判空 if(head == NULL) return head; struct ListNode*n1,*n2,*n3; //设置三个指针,n1,n2,n3每循环一次后移 n1 = NULL;n2 = head;n3 = n2->next; while(n2) { n2->next = n1; n1=n2; n2=n3; if(n3) n3=n3->next; } //此时的头节点以及变成n1了 return n1; }
02-20
3201
02-25
1339
02-24
8834
02-22
3011
02-25
8763