Java 版本的单项链表插入
2016-09-18 22:43
330 查看
前言:今天去一家公司去面试,聊了一会然后让我手写一段单项链表的插入,其实题目很简单。可是自己把自己绕到递归中去了。然后我就呵呵了。
晚上下班回家,自己又重新整理了一下思路,写了一下代码。将两种方式都实现一下,一种是面试官的想法,一种是我的递归,呵呵,总之都实现了。
当面试的时候,自己思路一下子没有想到点子上,就会越想越钻牛角尖,然后变得紧张,导致思路越来越模糊。
说明自己还是没有沉住气,心态还需要磨练。
技术还不过硬啊,明显还需要提高。
最后想说一句话:我叫不紧张,呵呵。
晚上下班回家,自己又重新整理了一下思路,写了一下代码。将两种方式都实现一下,一种是面试官的想法,一种是我的递归,呵呵,总之都实现了。
import java.util.Random; /** * 单项列表插入的测试类 * @date 2016-09-18 * @author Henry * */ public class YKLinkList { public static void main(String[] args) { LinkList list = new LinkList(); Random random = new Random(); for (int i = 0; i < 10; i++) { //面试官提到的简单的方式。 //list.insert(random.nextInt(10)); //我把自己想到的递归写了一下。 list.insert2(random.nextInt(10)); } //打印输出一下 Node head = list.head; while (head != null) { System.out.println(head.val); head = head.next; } } } /** * 节点的定义,很简单是吧,都没有用泛型 * @date 2016-09-18 * @author Henry * */ class Node { int val; Node next; public Node(int val, Node next) { this.val = val; this.next = next; } public Node(int val) { this(val, null); } public Node() { } } /** * 单项列表的定义 * @date 2016-09-18 * @author Henry * */ class LinkList { Node head;//定义头节点 /** * 面试官的想法,用while循环来做插入。确实简单,当时为什么产生盲区了呢。我也不得而知啊。 * @date 2016-09-18 * @param a 要插入的数值。 */ void insert(int a) { if (head == null) { head = new Node(a); return; } Node head2 = head; while (head2 != null) { if(head2.val>a){ head=new Node(a); head.next=head2; break; } if (head2.val <= a && head2.next == null) { head2.next = new Node(a); break; } if (head2.val <= a && head2.next.val > a) { Node next = head2.next; head2.next = new Node(a, next); break; } head2 = head2.next; } } /** * 这是我当时不知道为什么就陷入递归中了,并且当时手写代码的时候,一塌糊涂。 * @date 2016-09-18 * @param a */ void insert2(int a) { /* * 递归自增 */ head=insert0(a, head); } /** * 重新定义递归方法,这种写法JDK很多地方都有见到。 * @param a * @param head2 * @return 返回的永远都是头节点。 */ Node insert0(int a,Node head2){ if (head2 == null) { head2 = new Node(a); return head2; } if(head2.val>a){ Node info=new Node(a); info.next=head2; return info; } if (head2.val <= a && head2.next == null) { head2.next = new Node(a); return head2; } if (head2.val <= a && head2.next.val > a) { Node next = head2.next; head2.next = new Node(a, next); return head2; } head2.next=insert0(a,head2.next); return head2; } }
当面试的时候,自己思路一下子没有想到点子上,就会越想越钻牛角尖,然后变得紧张,导致思路越来越模糊。
说明自己还是没有沉住气,心态还需要磨练。
技术还不过硬啊,明显还需要提高。
最后想说一句话:我叫不紧张,呵呵。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- [C/C++]反转链表
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序