题目来源:LeetCode
- 删除链表中的结点
(使用替换思想)
class Solution {
public void deleteNode(ListNode node) {
node.val = node.next.val;
node.next = node.next.next;
//思路:把下一个节点的值赋给当前节点,然后将当前节点指向下下个节点,替换思想
}
}
- 链表的中间结点
class Solution {
//单链表的中间节点
//快慢引用
public ListNode middleNode1(ListNode head) {
ListNode slow = this.head;
ListNode fast = this.head;
while(fast != null && fast.next != null){
slow = slow.next;
fast = fast.next.next;
}
return slow;
}
//先求长度,走一半长度步数,然后返回当前结点
public ListNode middleNode2(ListNode head) {
ListNode node = head;
int len = 0;
for(;head != null;head = head.next){//求链表的长度
len++;
}
int mid = len / 2;
for(int i = 1;i <= mid;i++){//将链表从前往后遍历,一直到中间元素
node = node.next;
}
return node;//最后返回node
}
}