题目:
定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
示例:
输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL
限制:
0 <= 节点个数 <= 5000
思路:
- 首先设置两个指针,让第一个指针先走k步;
- 第二个指针从head开始,与第一个指针同时出发;
- 当第一个指针走到链表尾部的时候,第二个指针所在的位置就是倒数第k个节点。
package edu.LeetCode;
/**
* 输入一个链表,输出链表中的倒数第k个节点
*/
class ListNode{
int val;
ListNode next;
ListNode(int x){
val = x;
}
}
public class 链表的倒数第K个节点 {
public static ListNode getKthFromEnd(ListNode head,int k){
ListNode fast = head;//快指针
ListNode slow = head;//慢指针
//fast指针先走k步
for(int i = 0 ; i < k ; i++){
fast = fast.next;
}
//fast与slow指针同时出发
while(fast != null){
fast = fast.next;
slow = slow.next;
}
return slow;
}
public static void main(String[] args) {
ListNode l1 = new ListNode(1);
ListNode l2 = new ListNode(2);
ListNode l3 = new ListNode(3);
ListNode l4 = new ListNode(4);
ListNode l5 = new ListNode(5);
l1.next = l2;
l2.next = l3;
l3.next = l4;
l4.next = l5;
int k = 3;
ListNode result = getKthFromEnd(l1,k);
while (result != null) {
System.out.print(result.val + "->");
result = result.next;
}
}
}
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/fan-zhuan-lian-biao-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。