24. 两两交换链表中的节点
题目链接:24. 两两交换链表中的节点
文档讲解:代码随想录(programmercarl.com)
视频讲解:帮你把链表细节学清楚! | LeetCode:24. 两两交换链表中的节点
状态:已解决
仅Java代码:
/**
* 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 swapPairs(ListNode head) {
ListNode p=new ListNode(0,head);
ListNode end =p;
ListNode nex =head;
ListNode temp =head;
while(end.next!=null&&end.next.next!=null){
temp=nex;
nex=end.next.next.next;
end.next=temp.next;
end.next.next=temp;
temp.next=nex;
end=temp;
}
return p.next;
}
}
19.删除链表的倒数第N个节点
题目链接:19.删除链表的倒数第N个节点
文档讲解:代码随想录(programmercarl.com)
视频讲解:链表遍历学清楚! | LeetCode:19.删除链表倒数第N个节点
状态:已解决
仅Java代码
/**
* 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) {
if(head.next==null){
return null;
}
ListNode a = head;
ListNode b = head;
ListNode c = head;
int n1=n;
while(n1>1){
a=a.next;
n1--;
}
while(a.next!=null){
a=a.next;
b=b.next;
if(b!=head.next&&b!=head){
c=c.next;
}
}
if(b==head){
head=head.next;
}else{
c.next=b.next;
}
return head;
}
}
面试题 02.07. 链表相交
题目链接:面试题 02.07. 链表相交
文档讲解:代码随想录(programmercarl.com)
状态:已解决
仅Java代码:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
ListNode p1 = headA;
ListNode p2 = headB;
int n=0;
int m=0;
while(p1!=null){
p1=p1.next;
n++;
}
while(p2!=null){
p2=p2.next;
m++;
}
p1 = headA;
p2 = headB;
for(int i=0;i<n+m;i++){
if(p1==p2){
return p1;
}
if(p1.next==null){
p1=headB;
}else{
p1=p1.next;
}
if(p2.next==null){
p2=headA;
}else{
p2=p2.next;
}
}
return null;
}
}
142.环形链表II
题目链接:142.环形链表II
文档讲解:代码随想录(programmercarl.com)
视频讲解:把环形链表讲清楚! 如何判断环形链表?如何找到环形链表的入口? LeetCode:142.环形链表II
状态:已解决
仅Java代码
/**
* 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) {
if(head==null||head.next==null){
return null;
}
ListNode p1=head;
ListNode p2=head;
int flag=0;
while(p2!=null&&p2.next!=null){
p1=p1.next;
p2=p2.next.next;
if(p1==p2){
flag=1;
break;
}
}
if(flag==0){
return null;
}else{
ListNode x1=head.next;
p1=p1.next;
while(p1!=p2){
p1=p1.next;
x1=x1.next;
}
ListNode x2=head;
while(x1!=x2){
x1=x1.next;
x2=x2.next;
}
return x1;
}
}
}