本题思路:可以先创建三个指针n1为空 n2为head n3为n2的下一个节点 ,然后令n2指向n1,再让n2 = n1,再让n3往后走最后返回n1即可
开始创建
第一次修改,往后依次类推
最后
/** * struct ListNode { * int val; * struct ListNode *next; * }; */ /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * pre:用来指向反转后的节点,初始化为null; //cur:当前节点指针(cur=head); //迭代:在遍历链表时,将当前节点的next指针指向前一个节点(head->next=pre),由于节点没有引用其前一个节点,必须事先存储前一个节点(pre=head);在更改引用之前,还有存储后一个节点(cur=head->next),最后返回新的头引用(head=cur)。 * * @param head ListNode类 * @return ListNode类 */ typedef struct ListNode ListNode; struct ListNode* ReverseList(struct ListNode* head ) { //处理空链表 if(head ==NULL){ return head; } //先创建三个指针 ListNode* n1, *n2, *n3; n1 = NULL, n2 = head, n3 = head->next; //遍历链表,修改节点指针 ListNode* pcur = head; //这里是创建一个临时的指针来遍历链表 while(n2){ //修改n2的指向 n2->next = n1; //修改三个指针的位置 n1 = n2; n2 = n3; if(n3) n3 = n3->next; } return n1; }