1,反转一个单链表
采用头插法即可
class Solution {public ListNode reverseList(ListNode head) {if(head == null){return head;}ListNode cur = head.next;head.next =null;while(cur != null){ListNode curN = cur.next;cur.next = head;head= cur ;cur = curN;}return head;}
}
2,链表的中间结点
给你单链表的头结点 head
,请你找出并返回链表的中间结点。
如果有两个中间结点,则返回第二个中间结点。
所以应该这样写:
class Solution {public ListNode middleNode(ListNode head) {ListNode fast = head;ListNode slow = head;while(fast != null && fast.next!=null){fast = fast.next.next;slow = slow.next;}return slow;}
}
3.找出单向链表中倒数第 k 个节点
class Solution {public int kthToLast(ListNode head, int k) {ListNode fast = head;ListNode slow = head;if(k<=0 ){return -1;}//1,先让fast走k-1步int count= 0;while(count != k-1){fast=fast.next;//判断k过大而出现的错误if(fast==null){return -1;}count++;}//2,然后一起走 ,当fast走到最后一个节点时 slow就是倒数第k个节点的位置while(fast.next != null){fast=fast.next;slow=slow.next;}return slow.val;}
}