List
判断链表是否有环
一个快节点,一个慢节点,如果有环,快节点一定会追上慢节点
/**
* Definition for singly-linked list.
* class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public boolean hasCycle(ListNode head) {
ListNode fast = head;
ListNode slow = head;
while(fast!=null && fast.next!=null){
slow = slow.next;
fast = fast.next.next;
if(slow == fast) return true;
}
return false;
}
}
删除一个节点
将要删除节点复制为下一个节点,并删除下一个节点。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public void deleteNode(ListNode node) {
//将此节点复制为下一个节点,删除下一个节点
node.val = node.next.val;
ListNode temp = node.next.next;
node.next.next = null;
node.next = temp;
}
}
删除重复节点
Given a sorted linked list, delete all duplicates such that each element appear only once.
For example,
Given 1->1->2, return 1->2.
Given 1->1->2->3->3, return 1->2->3.
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode deleteDuplicates(ListNode head) {
if(head==null || head.next == null) return head;
ListNode node1 = head;
ListNode node2 = head.next;
while(node2 != null){
if(node1.val != node2.val){
node1 = node2;
n