牛客网高频算法习题系列-BM1反向链表题目描述给定一个单链表头节点pHead(头节点有值),长度为n、反转链表后,返回新链表的头部。见原标题:BM1反向链表解题一:节点反转首先,如果头部为空或者只有一个节点,直接return。否则,用first和next指针分别指向链表的前两个节点,将它们的next指针字段取反,然后继续遍历链表的后续节点,直到取反最后一个节点。注意头节点的next需要指向null。最后返回第一个节点,即反向新链表的头节点。解法二:递归方法同上,首先需要判断,如果头部为空或者只有一个结点,则直接返回。否则递归处理,递归处理流程如下:递归终止条件为头结点为空或没有下一个结点;否则,递归得到的head.next的反向链表是reverse,然后reversenext指针指向head,另外还需要记住head节点的next需要指向null。publicclassBm001{/***反向节点**@paramhead原链表的头节点*@return*/publicstaticListNodereverseList(ListNodehead){//如果链表为空或者只有一个节点,不需要Reverse,直接返回原链表if(head==null||head.next==null){returnhead;}ListNodefirst=head,second=head.next;第一个.下一个=空;while(first!=null&&second!=null){ListNodetemp=first;第一=第二;第二个=第二个。下一个;first.next=temp;}先返回;}/***递归方法**@paramhead原链表头节点*@return*/publicstaticListNodereverseList2(ListNodehead){//递归终止条件if(head==null||head.next==null){返回头;}//ListNode的递归处理reverse=reverseList2(head.next);head.next.next=头;head.next=null;反向返回;}publicstaticvoidmain(String[]args){//测试用例ListNodehead=ListNode.testCase1();System.out.println("反转前");ListNode.print(head);System.out.println("反转后");ListNodenewHead=reverseList(head);ListNode.print(newHead);System.out.println("再次反转后");ListNodenewHead2=reverseList2(newHead);ListNode.print(newHead2);}}$1.01^{365}≈37.7834343329$$0.99^{365}≈0.02551796445$相信坚持的力量!
