题解 | #反转链表#

反转链表

http://www.nowcoder.com/practice/75e878df47f24fdc9dc3e400ec6058ca

  • 思路1
    三个指针,一个指向pre,一个指向cur,一个指向next。对每一个节点,调整其next指针指向前一个节点。

    public class Solution {
      public ListNode ReverseList(ListNode head) {
          ListNode preNode = null,curNode = null,nextNode = null;
          curNode = head;
    
          while(curNode!=null){
              nextNode = curNode.next;
              //翻转
              curNode.next = preNode;
              preNode = curNode;
              curNode = nextNode;
          }
          return preNode;
      }
  • 思路2
    利用栈先进后出的特性,重新建立链表

    import java.util.Stack;
    public class Solution {
      public ListNode ReverseList(ListNode head) {
          Stack<ListNode> stack=new Stack();
          while(head!=null){
              stack.push(head);
              head = head.next;
          }
          if(stack.empty()) return null;
          ListNode resHead = stack.pop();
    
          ListNode ptr = resHead;
          while(!stack.empty()){
              ptr.next = stack.pop();
              ptr = ptr.next;
          }
          ptr.next = null;
          return resHead;
      }
    }
  • 思路3
    利用递归,将递归函数的next连接到当前节点

    public class Solution {
      ListNode newHead = null;
      public ListNode ReverseList(ListNode head) {
          if(head ==null||head.next == null) {
              newHead = head;
              return head;
          }
          ListNode curNode = ReverseList(head.next);
          (head.next).next = head;
          head.next = null;
          return curNode;
      }
    }
全部评论

相关推荐

预计下个星期就能开奖吧,哪位老哥来给个准信
华孝子爱信等:对接人上周说的是这周
点赞 评论 收藏
分享
牛客101244697号:这个衣服和发型不去投偶像练习生?
点赞 评论 收藏
分享
11-18 15:57
门头沟学院 Java
最终归宿是测开:这个重邮的大佬在重邮很有名的,他就喜欢打92的脸,越有人质疑他,他越觉得爽😂
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务