从头到尾打印链表
输入一个链表,按链表从尾到头的顺序返回一个ArrayList。
代码
1、用list来接受每个节点的数据;
2、此时的数据是顺序的,再倒序;
/**
* 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> list = new ArrayList<>();
ArrayList<Integer> inList = new ArrayList<>();
while (listNode != null ) {
list.add(listNode.val);
listNode = listNode.next;
}
for (int i=list.size();i>0;i--){
inList.add(list.get(i-1));
}
return inList;
}
}
链表中环的入口节点
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。
代码
1、设置两个指针,快指针和慢指针,快指针每次走两步,慢指针每次走一步;
2、如果存在环,则一定有快指针和慢指针相遇的一天,这时候记录下,并将慢指针返回到起始位置;
3、再让快指针和慢指针每次都走一步,当相遇的时候,就是环的入口位置。
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public ListNode EntryNodeOfLoop(ListNode pHead)
{
if (pHead == null || pHead.next == null) return null;
ListNode fast = pHead;
ListNode last = pHead;
while (fast != null && fast.next != null){
last = last.next;
fast = fast.next.next;
if (last == fast){
last = pHead;
while (last != fast){
last = last.next;
fast = fast.next;
}
if (last == fast){
return last;
}
}
}
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)
{
if (pHead == null){
return null;
}
ListNode p1 = new ListNode(-1);//用来记录新链表的头地址
ListNode listNode = p1;
ListNode p2 = pHead;
while(p2 != null){
if (p2.next != null){
if (p2.val == p2.next.val){//判断两个节点的值是否相等
ListNode ln = p2.next;//用来记录相等后的节点
while (ln.next != null) {//用来循环判断下一节点是否和P2节点相等
if (p2.val == ln.next.val) {
ln = ln.next;
}else {
p2.next = ln;//当不相等时,将相等的最后一个节点作为P2的下一个节点
break;
}
p2.next = ln;//相等时,也作为下一个节点
}
p2 = p2.next.next;
if (p2 != null){
continue;
}else {//当最后一个节点的时候,将P1的下一个节点连接到P2 节点
p1.next = p2;
continue;
}
}
p1.next = p2;
p1 = p1.next;
p2 = p2.next;
}else {
p1.next = p2;
// p1 = p1.next;
p2 = p2.next;
}
}
return listNode.next;
}
}