zoukankan      html  css  js  c++  java
  • Reverse Linked List

    Reverse a singly linked list.

    Thoughts:

    1.Iterative Method.

    Loop the linked list, set two pointers, one called "first" to always point to the head of the list, the other called "tail" to mark the currently looped element, each time we loop to that element, we switch the first and tail element to iteratively finish the reverse function.

    Code:

        public ListNode reverseList(ListNode head) {
            ListNode first = null;
            ListNode tail = head;
                  ListNode tmp;
            while(tail!=null){
      
            tmp=first;
            first = tail;
            tail=tail.next;
            first.next=tmp;
            }
            
            return first;
        }

    2.Recursive Method

    There's code in one reply that spells it out, but you might find it easier to start from the bottom up, by asking and answering tiny questions (this is the approach in The Little Lisper):

    1. What is the reverse of null (the empty list)? null.
    2. What is the reverse of a one element list? the element.
    3. What is the reverse of an n element list? the reverse of the second element on followed by the first element.

    Code:

    public ListNode Reverse(ListNode list)
    {
        if (list == null) return null; // first question
    
        if (list.next == null) return list; // second question
    
        // third question - in Lisp this is easy, but we don't have cons
        // so we grab the second element (which will be the last after we reverse it)
    
        ListNode secondElem = list.next;
    
        // bug fix - need to unlink list from the rest or you will get a cycle
        list.next = null;
    
        // then we reverse everything from the second element on
        ListNode reverseRest = Reverse(secondElem);
    
        // then we join the two lists
        secondElem.Next = list;
    
        return reverseRest;
    }
  • 相关阅读:
    学习asp.net完整步骤
    UltraEdit中Matlab语法高亮显示的操作方法
    C#基础完成和深入
    75道程序员面试逻辑思维题
    模拟退火算法解决函数优化问题
    模拟退火算法解决TSP问题
    C#入门
    简单感知器模型解决简单真值表问题
    jQuery 1.3.2 :visible选择器问题
    NUnit2.0详细使用方法
  • 原文地址:https://www.cnblogs.com/midan/p/4656006.html
Copyright © 2011-2022 走看看