zoukankan      html  css  js  c++  java
  • P112、面试题16:反转链表

    题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。链表结点定义如下:
    struct ListNode{
          int    m_nKey;
          ListNode*    m_pNext;
    }

    相当于有两条链表,从一条链表复制到另外一条链表中。
     
    测试用例:
    1)输入的链表头指针是null;
    2)输入的链表只有一个结点;
    3)输入的链表有多个结点。
     
    代码实现:
    package com.yyq;
    
    /**
     * Created by Administrator on 2015/9/13.
     */
    public class ReverseList {
        public static ListNode reverseList(ListNode pHead) {
            ListNode pReversedHead = null;
            ListNode pNode = pHead;
            ListNode pPrev = null;
            ListNode pNext = null;
            while (pNode != null) {
                pNext = pNode.getM_pNext(); //注意这里面的逻辑,如果把这句话放在while最后的话,会产生空指针异常
                if (pNext == null) {
                    pReversedHead = pNode;
                }
                pNode.setM_pNext(pPrev);
                pPrev = pNode;
                pNode = pNext;
            }
            return pReversedHead;
        }
    
        public static void printList(ListNode pListHead) {
            if (pListHead == null)
                return;
            ListNode pNode = pListHead;
            while (pNode != null) {
                System.out.print(pNode.getM_nValue() + "  ");
                pNode = pNode.getM_pNext();
            }
            System.out.println();
        }
    
        // ====================测试代码====================
        public static ListNode Test(ListNode pHead) {
            System.out.println("The original list is: ");
            printList(pHead);
            ListNode pReversedHead = reverseList(pHead);
            System.out.println("The reversed list is: ");
            printList(pReversedHead);
    
            return pReversedHead;
        }
    
        // 输入的链表有多个结点
        public static void Test1() {
            ListNode pNode1 = new ListNode(1);
            ListNode pNode2 = new ListNode(2);
            ListNode pNode3 = new ListNode(3);
            ListNode pNode4 = new ListNode(4);
            ListNode pNode5 = new ListNode(5);
            ListNode pNode6 = new ListNode(6);
    
            pNode1.setM_pNext(pNode2);
            pNode2.setM_pNext(pNode3);
            pNode3.setM_pNext(pNode4);
            pNode4.setM_pNext(pNode5);
            pNode5.setM_pNext(pNode6);
    
            Test(pNode1);
            pNode1 = null;
        }
    
        // 输入的链表只有一个结点
        public static void Test2() {
            ListNode pNode1 = new ListNode(1);
            Test(pNode1);
            pNode1 = null;
        }
    
        // 输入空链表
        public static void Test3() {
            Test(null);
        }
    
       public static void main(String[] args) {
            Test1();
            Test2();
            Test3();
        }
    }
     
    输出结果:
    The original list is: 
    1  2  3  4  5  6  
    The reversed list is: 
    6  5  4  3  2  1  
    The original list is: 
    1  
    The reversed list is: 
    1  
    The original list is: 
    The reversed list is: 
  • 相关阅读:
    HDOJ 1025 Constructing Roads In JGShining's Kingdom
    HDOJ 1274 展开字符串
    HDOJ 1503 Advanced Fruits
    Codeforces Round #187 (Div. 2) A,B
    HDOJ 1160 FatMouse's Speed
    HDOJ 1267 下沙的沙子有几粒?
    HDOJ 1224 Free DIY Tour
    山娃向大家问好啦。
    开发系统建议
    打开web全屏
  • 原文地址:https://www.cnblogs.com/yangyquin/p/4929268.html
Copyright © 2011-2022 走看看