算法--链表删除倒数第k结点
剑指offer22:链表中倒数第k个节点
输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有6个节点,从头节点开始,它们的值依次是1、2、3、4、5、6。这个链表的倒数第3个节点是值为4的节点。
倒数第k,即为正数第n-k+1。
##思路
1.先遍历链表,得到链表长度n
遍历的过程中k--,此时会出现三种情况:
k>0 k=0 k<0
k>0时候,说明k的值大于链表的长度,不存在有倒数第k个结点;
k=0时候,说明倒数第k个结点就是头结点;
k<0属于一般情况,得到的是k = k-n;
2.重新遍历
从头结点开始,k++,当k加到0时,即为第n-k个结点
n-k->next就是我们要找的倒数第k个结点。
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */ class Solution { public ListNode getKthFromEnd(ListNode head, int k) { if(head == null || k < 1){ return head; } ListNode curr = head; while(head != null){ head = head.next; k--; } if(k == 0){ return curr; } if(k < 0){ while(k != 0){ k++; curr = curr.next; } } return curr; } }

浙公网安备 33010602011771号