24. 两两交换链表中的节点
题目链接:24. 两两交换链表中的节点 - 力扣(LeetCode)
题目难度:中等
代码:
class Solution {
public ListNode swapPairs(ListNode head) {
if(head==null||head.next==null) return head;
ListNode list=new ListNode();
list.next=head;
ListNode s=list,p=list.next,q=list.next.next;
while(p!=null&&q!=null){
s.next=q;
p.next=q.next;
q.next=p;
s=p;
p=s.next;
if(p!=null) q=p.next;
}
return list.next;
}
}
19. 删除链表的倒数第 N 个结点
题目链接:19. 删除链表的倒数第 N 个结点 - 力扣(LeetCode)
题目难度:中等
代码:
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
ListNode s=new ListNode();
s.next=head;
ListNode p=s,q=s;
while(n-->0)
q=q.next;
while(q.next!=null){
p=p.next;
q=q.next;
}
p.next=p.next.next;
return s.next;
}
}
面试题 02.07. 链表相交
题目链接:面试题 02.07. 链表相交 - 力扣(LeetCode)
解题思路:双指针走到链尾后转换所指向链表
题目难度:简单
代码:
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
// p1 指向 A 链表头结点,p2 指向 B 链表头结点
ListNode p1 = headA, p2 = headB;
while (p1 != p2) {
// p1 走一步,如果走到 A 链表末尾,转到 B 链表
if (p1 == null) p1 = headB;
else p1 = p1.next;
// p2 走一步,如果走到 B 链表末尾,转到 A 链表
if (p2 == null) p2 = headA;
else p2 = p2.next;
}
return p1;
}
}
142. 环形链表 II
题目链接:142. 环形链表 II - 力扣(LeetCode)
题目难度:中等
代码:
public class Solution {
public ListNode detectCycle(ListNode head) {
ListNode slow = head;
ListNode fast = head;
while (fast != null && fast.next != null) {
slow = slow.next;
fast = fast.next.next;
if (slow == fast) {
ListNode index1 = fast;
ListNode index2 = head;
while (index1 != index2) {
index1 = index1.next;
index2 = index2.next;
}
return index1;
}
}
return null;
}
}