给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。
不允许修改 链表。
直接运用哈希表做题
- /**
- * Definition for singly-linked list.
- * class ListNode {
- * int val;
- * ListNode next;
- * ListNode(int x) {
- * val = x;
- * next = null;
- * }
- * }
- */
- public class Solution {
- public ListNode detectCycle(ListNode head) {
- if(head == null ||head.next == null )
- return null;
-
-
- HashSet<ListNode> s = new HashSet();
-
- ListNode p=head;
- while(p != null){
- if(s.add(p) == false){
- // if(head.next.next == head)
- // return null;
- // else
- return p;
- }
- p=p.next;
- }
- return null;
-
- }
- }
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
- /**
- * Definition for singly-linked list.
- * public class ListNode {
- * int val;
- * ListNode next;
- * ListNode() {}
- * ListNode(int val) { this.val = val; }
- * ListNode(int val, ListNode next) { this.val = val; this.next = next; }
- * }
- */
- class Solution {
- public ListNode reverseList(ListNode head) {
- if(head == null)
- return head;
- //原地反转
- // ListNode p = null;
- // ListNode t = null;
- // while(head != null ){
- // t = head;
- // head = head.next;
- // t.next = p;
- // p = t;
- // }
-
- // return t;
-
- //前后指针做题
- ListNode p,q;
- p=null;
- q=head;
- while(q!=null && q.next != null){
- head=head.next;
- q.next = p;
- p=q;
- q=head;
- }
- q.next = p;
- return q;
-
- }
- }