两两交换链表中的节点
随想录的文章链接
programmercarl.com/0024.%E4%B8…
看完代码随想录之后的想法
递归的思路更简单一些。
自己实现过程中遇到哪些困难
没碰到困难。
今日收获,记录一下自己的学习时长
文章5分钟,写代码15分钟。
public static ListNode swapPairs(ListNode head) {
if (head == null || head.next == null) {
return head;
}
ListNode cur = head;
ListNode next = cur.next;
cur.next = swapPairs(next.next);
next.next = cur;
head = next;
return head;
}
删除链表中倒数第N个节点
随想录的文章链接
programmercarl.com/0019.%E5%88…
看完代码随想录之后的想法
没啥想法,之前被面试过,一样的思路。
自己实现过程中遇到哪些困难
没碰到困难。
今日收获,记录一下自己的学习时长
文章5分钟,写代码10分钟。
public static ListNode removeNthFromEnd(ListNode head, int n) {
ListNode dummyHead = new ListNode(0, head);
ListNode first = dummyHead;
for (int i = 0; i < n + 1; i++) { // 先走n+1步
first = first.next;
}
ListNode second = dummyHead;
while (first != null) {
second = second.next;
first = first.next;
}
second.next = second.next.next;
return dummyHead.next;
}
链表相交
随想录的文章链接
programmercarl.com/%E9%9D%A2%E…
看完代码随想录之后的想法
没想出来判断相交的方法,惭愧!!!
自己实现过程中遇到哪些困难
不知道如何判断相交。
今日收获,记录一下自己的学习时长
文章5分钟,写代码15分钟。
public static ListNode getIntersectionNode(ListNode headA, ListNode headB) {
int lengthA = 0;
ListNode tempA = headA;
while (tempA != null) {
tempA = tempA.next;
lengthA++;
}
int lengthB = 0;
ListNode tempB = headB;
while (tempB != null) {
tempB = tempB.next;
lengthB++;
}
if (lengthA == 0 || lengthB == 0) {
return null;
}
int diff = lengthA > lengthB ? lengthA - lengthB : lengthB - lengthA;
tempA = lengthA > lengthB ? headA : headB;
tempB = lengthA > lengthB ? headB : headA;
for (int i = 0; i < diff; i++) {
tempA = tempA.next;
}
while (tempA != null && tempA != tempB) {
tempA = tempA.next;
tempB = tempB.next;
}
return tempA;
}
链表相交
随想录的文章链接
programmercarl.com/0142.%E7%8E…
看完代码随想录之后的想法
不看文章,打死也做不出来,推理的过程还是要仔细琢磨。
自己实现过程中遇到哪些困难
知道如何判断是否有环,不知道怎么判断入口。
今日收获,记录一下自己的学习时长
文章15分钟,写代码8分钟。
public static ListNode detectCycle(ListNode head) {
ListNode fast = head;
ListNode slow = head;
ListNode result = null;
while (fast != null && fast.next != null) {
fast = fast.next.next;
slow = slow.next;
if (fast == slow) { // 相遇,有环
result = head;
while (result != slow) {
result = result.next;
slow = slow.next;
}
break;
}
}
return result;
}