代码随想录训练营Day4|24. 两两交换链表中的节点 ;19.删除链表的倒数第N个节点 ;面试题 02.07. 链表相交 ;142.环形链表II

24.两两交换链表中的节点 

这题比较有意思,交换的时候要保存两个临时节点,写起来有点绕,但是模拟的思路很清晰

class Solution {
    public ListNode swapPairs(ListNode head) {
        ListNode dummy = new ListNode(-1);
        dummy.next = head;
        ListNode cur = dummy;
        while(cur.next != null && cur.next.next != null){
            ListNode tmp1 = cur.next;
            ListNode tmp3 = cur.next.next.next;

            cur.next = cur.next.next;
            cur.next.next = tmp1;
            cur.next.next.next = tmp3;

            cur = cur.next.next;
        }
        return dummy.next;
    }
}

代码随想录训练营Day4|24. 两两交换链表中的节点 ;19.删除链表的倒数第N个节点 ;面试题 02.07. 链表相交 ;142.环形链表II_第1张图片

 19.删除链表的倒数第N个节点

这道题前两天为了对付面试写过,只要确定倒数n的位置,跳过实际上一行代码就结束了,属于是链表的样式,考察双指针的使用

class Solution {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        ListNode fast=head, slow = head;
        while(n!=0){
            fast = fast.next;
            n--;
        }
        if(fast==null) return head.next;
        while(fast.next!=null){
            fast = fast.next;
            slow = slow.next;
        }
        slow.next = slow.next.next;
        return head;
    }
}

代码随想录训练营Day4|24. 两两交换链表中的节点 ;19.删除链表的倒数第N个节点 ;面试题 02.07. 链表相交 ;142.环形链表II_第2张图片

面试题02.07.链表相交

这道题也是对于双指针思想的考察,这里的思考的是为何要把链表长度限制为相同,因为相交就意味着第一个指针完全相同,且后续内容也完全一致,那么这个基础就是长度一致,所以选择首先将二者长度拉到同一起跑线,再进行一一对比

public class Solution {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        ListNode curA = headA;
        ListNode curB = headB;
        int lenA=0, lenB=0;
        while(curA != null){
            curA = curA.next;
            lenA++;
        }
        while(curB != null){
            curB = curB.next;
            lenB++;
        }
        curA = headA;
        curB = headB;
        if(lenA0){
            curA = curA.next;
        }
        while(curA != null){
            if(curA==curB){
                return curA;
            }
            curA = curA.next;
            curB = curB.next;
        }
        return null;
    }
}

代码随想录训练营Day4|24. 两两交换链表中的节点 ;19.删除链表的倒数第N个节点 ;面试题 02.07. 链表相交 ;142.环形链表II_第3张图片

142.环形链表2

有一说一,每次写道这题都忘了思路

public class Solution {
    public ListNode detectCycle(ListNode head) {
        ListNode fast = head;
        ListNode slow = head;
        while(fast != null && fast.next != null){
            fast = fast.next.next;
            slow = slow.next;
            if(fast == slow){
                ListNode first = fast;
                ListNode second = head;
                while(first != second){
                    first=first.next;
                    second=second.next;
                }
                return first;
            }
        }
        return null;
    }
}

代码随想录训练营Day4|24. 两两交换链表中的节点 ;19.删除链表的倒数第N个节点 ;面试题 02.07. 链表相交 ;142.环形链表II_第4张图片

 

你可能感兴趣的:(链表,数据结构)