1.删除链表的倒数第n个节点
力扣https://leetcode.cn/submissions/detail/482739445/
/*** 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 removeNthFromEnd(ListNode head, int n) {ListNode dummy=new ListNode(-1);dummy.next=head;//删除倒数第n个,先要找到倒数第N+1个节点ListNode x=findFromEnd(dummy,n+1);//删除倒数第n个几点x.next=x.next.next;return dummy.next;}// 返回链表的倒数第 k 个节点ListNode findFromEnd(ListNode head, int k) {ListNode p1 = head;// p1 先走 k 步for (int i = 0; i < k; i++) {p1 = p1.next;}ListNode p2 = head;// p1 和 p2 同时走 n - k 步while (p1 != null) {p2 = p2.next;p1 = p1.next;}// p2 现在指向第 n - k + 1 个节点,即倒数第 k 个节点return p2;}}
2.环形链表
力扣https://leetcode.cn/submissions/detail/482785908/
/*** 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) {ListNode fast,slow;fast=slow=head;while(fast!=null&&fast.next!=null){fast=fast.next.next;slow=slow.next;if(fast==slow)break;}//上面的代码类似hasCycle函数if(fast==null||fast.next==null){//fast遇到空指针说明没有环return null;}//重新指向头节点slow=head;//快慢指针同步前进,相交点就是环的起点while(slow!=fast){fast=fast.next;slow=slow.next;}return slow;}
}
3.删除链表中的重复元素
力扣https://leetcode.cn/submissions/detail/482785908/
/*** 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 deleteDuplicates(ListNode head) {//删除排序链表中的重复元素if(head==null)return null;ListNode slow=head,fast=head;while(fast!=null){if(fast.val!=slow.val){slow.next=fast;slow=slow.next;}fast=fast.next;}//断开和后面重复元素的链接slow.next=null;return head;}
}