LeetCode-160 相交链表
题目:给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/intersection-of-two-linked-lists
思路1:先遍历链表A,使用一个HashSet存放其中的A的所有结点,然后再去遍历链表B,如果B的结点已经在Set集合中出现过,那么那个结点即为相交的结点。如果遍历结束都没有出现相同,说明两个链表不相交,返回null。
代码实现:
1 | public ListNode getIntersectionNode(ListNode headA, ListNode headB) { |
思路2:先遍历一遍A,B,获取A,B的长度,然后将较长的链表的遍历指针向前移动n-m,双指针同时进行遍历,如果遍历到同一结点,说明该结点就是相交结点。如果遍历结束也没有相交,返回null。
代码实现:
1 | public ListNode getIntersectionNode(ListNode headA, ListNode headB) { |
LeetCode-206 反转链表
题目:给你单链表的头节点 head
,请你反转链表,并返回反转后的链表。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/reverse-linked-list/
思路:我们可以设置一个空的结点preNode,一个cur = head,然后cur去遍历链表,遍历一个结点,就让这个结点指向preNode,同时preNode移动到cur的位置(注意遍历过程中要用另外一个ListNode next来存储cur.next的结点)
代码实现:
1 | public ListNode reverseList(ListNode head) { |
LeetCode-234 回文链表
题目:给你一个单链表的头节点 head
,请你判断该链表是否为回文链表。如果是,返回 true
;否则,返回 false
。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/palindrome-linked-list/
思路:可以将链表先存储进数组中,再在数组中进行双指针遍历
代码实现:
1 | public boolean isPalindrome(ListNode head) { |