第一题:剑指 Offer 18. 删除链表的节点
题目描述:
思路
顺着结点往下找,遇到当前数字跳过当前结点,然后直接输出。
代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode deleteNode(ListNode head, int val) {
ListNode cur=head , pre = null;
if(cur.val == val) return head.next;
while(cur.val != val){
pre = cur;
cur = cur.next;
}
pre.next = pre.next.next;
return head;
}
}
第二题:剑指 Offer 22. 链表中倒数第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) {
ListNode former = head,latter = head;
if(head == null) return null;
while(k != 0 && former != null){
former = former.next;
k--;
}
while(former != null){
former = former.next;
latter=latter.next;
}
return latter;
}
}