算法练-删除链表中重复元素
算法练中将包含相关算法和一些与考研题目结合的C语言的算法题进行延伸思考,在用Java简单实现的同时,对内容深化并尝试C语言的叙述来更加巩固当前知识点。 题目1存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。返回同样按升序排列的结果链表。 方法:一次遍历思路这个题的思路比较简单,因为是按升序排列的,所以重复的元素基本都是相邻着的,因此只需要比较相邻两个节点的值,就能判断出是否是重复的。 代码实现//删除链表中的重复元素public class test { public static void main(String[] args) { Node head = new Node(0); Node node1 = new Node(1); Node node2 = new Node(1); Node node3 = new Node(3); Node node4 = new Node(3); Node node5 = ...
算法练-环形链表
题目给定一个链表,判断链表中是否有环。 如果链表中存在环,就返回true。否则,返回false。 方法一:哈希表思路这个方法就是遍历整个链表中的所有节点,每遍历一个节点就判断它此前是否被访问过 用哈希表来存储已经访问过的节点,之后每到达一个节点时,如果该节点已经在哈希表里,就说明这个链表中有环 否则就把这个节点存入进去,重复这么一个过程,直到整个链表被遍历完 代码实现import java.util.*;//哈希表判断链表中是否有环public class test { public static void main(String[] args) { Node head = new Node(0); Node node1 = new Node(1); Node node2 = new Node(2); Node node3 = new Node(3); Node node4 = new Node(4); Node node5 = new Node(5); hea ...
算法练-反转单链表
题目给单链表的头节点 head ,请反转链表,并返回反转后的链表。 示例输入:head = [1,2,3,4,5]输出:[5,4,3,2,1] 方法一: 双指针迭代思路 首先要引入两个指针,分别是prev和curr,因为要把链表反转,那么就必须对next做文章,通过curr指针让当前节点的next指向上一个节点,而上一个节点由prev指针来表示。指向更改后两个指针往后移位。 但是在这里有一个问题,就是当curr.next->prev后,如图,节点1和节点2之间就断开了,那么curr指针就无法进行后移操作,所以我们还需要一个临时变量next,在将curr.next->prev前,先将curr的下一个节点暂时保存在这个临时变量next中,等第一个节点反转之后,prev后移,再将next里的值给到curr实现其后移。 代码实现//迭代法实现反转链表public class test { public static void main(String[] args) ...