//单链表反转
public static Node reverseLinkedList(Node head) {
Node pre = null
Node next = null
while (head != null) {
//保存下一个节点的指针
next = head.next
//当前节点的next指针指向前一个节点
head.next = pre
//pre指向当前节点
pre = head
//head指向下一个节点
head = next
}
return pre
}
//双向链表反转
public static DoubleNode reverseDoubleList(DoubleNode head) {
DoubleNode pre = null
DoubleNode next = null
while (head != null) {
next = head.next
head.next = pre
head.last = next
pre = head
head = next
}
return pre
}
//删除链表中值为num的节点
public static Node removeValue(Node head, int num) {
//处理头结点值是否为num的情况,因为最后返回头结点,如果头结点值为num,会涉及到换头的操作
while (head != null) {
if (head.data != num) {
break
}
head = head.next
}
Node pre = head
Node cur = head
//while循环判断主体就是cur指针遍历链表,判断节点的值是否等于num
//相等则删除,即 pre.next = cur.next
//不相等则pre和cur指针同时向前走一步,保持pre.next = next
while (cur != null) {
if (cur.data == num) {
pre.next = cur.next
} else {
pre = cur
}
cur = cur.next
}
return head
}