链表 Part02
今天整体感觉非常不错,所有题都可以一遍顺利写出来!希望可以继续加油!
24. 两两交换链表中的节点
自己想到的方法比较笨:找到要交换的第一个节点和第二个节点,再找到第一个节点的前一个和二个节点的后一个。如果(second.next != null && second.next.next != next)说明后面还有节点需要交换,则继续进行,否则就直接跳出。
学到的方法是递归:
理解还是比较好理解,但是要自己做到还是有一定难度!慢慢来吧!
中间的核心代码如下:
ListNode next = head.next;
ListNode newNode = swapPairs(next.next);
next.next = head;
head.next = newNode;
return next;
19.删除链表的倒数第N个节点
这个题较为基础
思路就是先得到链表的长度,然后总长度减掉倒数的数字就是要跳过的节点。
面试题 02.07. 链表相交
这道题比较简单,就是步骤较为繁琐。
首先判断两个链表的长度,然后将较长的那一个的头节点后移,使得两个链表的长度相等。最后就是两个指针从两个链表的头开始移动,如果“==”的话就是相遇的点。
142.环形链表II
这一题最重要的点!!!就是从头节点开始快慢指针相遇的节点和头节点距离环形开始的点的距离是一致的!!!
知道这一点就比较简单。
1.我们只需要先判定这个链表是否是个环形链表。2.从头开始找到快慢指针相遇的节点 3.从i相遇的点和头节点开始移动,相遇的点即为环形开始的节点。