1 链表反转
//结点类
public class Node{
private int val;//数据域
private Node next;//指针域,指向下一个指针
public Node(int val){
this.val=val;
}
}
//反转链表
public Node ReverseLinkList(Node node){
if (node==null||node.next==null){
return node;
}
//定义三个指针,1 当前指针,2 当前指针的前一个指针,3 当前指针的后一个指针
Node pre = null;
Node cur = node;
Node next = null;
while (cur !=null){
next = cur.next;
cur.next = pre;
pre= cur;
cur = next;
}
return pre;
}
2 单链表是否有环
(1)快慢指针
//结点类
public class Node{
private int val;//数据域
private Node next;//指针域,指向下一个指针
public Node(int val){
this.val=val;
}
}
public boolean isLoop(Node head){
//定义两个指针
Node fast = head;
Node slow = head;
while (fast !=null && fast.next!=null){
fast = fast.next.next;
slow = slow.next;
if (fast.equals(slow)){
return true;
}
}
return false;
}
3 输入两个链表,找出它们的第一个公共节点。
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
ListNode n1 = headA;
ListNode n2 = headB;
while (n1 != n2) {
if (n1 == null) {
n1 = headB;
}else {
n1 = n1.next;
}
if (n2 == null) {
n2 = headA;
}else {
n2 = n2.next;
}
}
return n1;
}
public class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
next = null;
}
}
5万+

被折叠的 条评论
为什么被折叠?



