链表问题(Java实现)
<一从尾到头打印链表>
题目描述
输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
代码如下:
第一种:直接加
/** * public class ListNode { * int val; * ListNode next = null; * * ListNode(int val) { * this.val = val; * } * } * */ import java.util.ArrayList; public class Solution { public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { ArrayList<Integer> res = new ArrayList<>(); ListNode node = listNode; while(node != null){ res.add(0, node.val); node = node.next; } return res; } }
第二种:用栈的特性想到:
import java.util.ArrayList; import java.util.Stack; public class Solution { public ArrayList<Integer> printListFromTailToHead(ListNode listNode) { Stack<Integer> stack = new Stack<>(); //创建一个堆栈的实例 while(listNode != 0){ //判断节点是否存在 stack.push(linkNode.val); //存在则节点入栈 list.add(linkNode.next); //添加下一个节点 } ArrayList<Integer> list = new ArrayList<>(); //创建一个数组 while(!stack.isEmpty()){ //判断栈是否为空 list.add(stack.pop()); //将节点的值出栈 } return list; //返回节点的值 } }
<二>链表中环的入口结点
题目描述
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。
代码如下:
/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } */ public class Solution { public ListNode EntryNodeOfLoop(ListNode pHead) { if(null == pHead || null == pHead.next){ return null; } ListNode p1 = pHead; ListNode p2 = pHead; while(p1 != null && p2 != null){ p1 = p1.next; p2 = p2.next.next; if(p1 == p2){ p1 = pHead; //无头节点时 while(p1 != p2){ p1 = p1.next; p2 = p2.next; } if(p1 == p2){ return p1; } } } return null; } }
<三> 删除链表中重复的结点
题目描述
在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5。
代码如下:
/* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } */ public class Solution { public ListNode deleteDuplication(ListNode pHead) { ListNode dunny = new ListNode(0); dunny.next = pHead; ListNode p = pHead; ListNode q = dunny; boolean isDel = false; while(p != null){ if(p.next != null && p.val == p.next.val){ isDel = true; p.next = p.next.next; }else{ p = p.next; if(isDel){ q.next = p; isDel = false; }else{ q = q.next; } } } return dunny.next; } }