题目描述
输入一个链表,输出该链表中倒数第k个结点。
思路:首先统计链表中结点的个数 为N,如果小于K则返回NULL,否则输出第N-K个节点,即倒数第K个节点
代码如下:
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode FindKthToTail(ListNode head,int k) {
ListNode list = head;
int count = 0;
while(list != null){
count++;
list = list.next;
}
if(k>count)return null;
ListNode p = head;
for(int i = 0;i<count -k;i++){
p = p.next;
}
return p;
}
}
题目描述
输入一个链表,反转链表后,输出新链表的表头。
思路:关键在于声明一个结点preNode用来记录前一个结点,使下一次循环时的结点的next指向它,反转顺序。
代码如下:
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
import java.util.Stack;
public class Solution {
public ListNode ReverseList(ListNode head) {
if(head == null || head.next == null)return head;
ListNode preNode = null;
while(head != null){
ListNode node = head.next;
head.next = preNode;
preNode = head;
head = node;
}
return preNode;
}
}
题目描述
输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。
思路:声明一个新链表,比较原来两个链表的 val 值,小的插入新链表即可。最后将没有比较的完的链表中的节点插入新链表
代码:
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}*/
public class Solution {
public ListNode Merge(ListNode list1,ListNode list2) {
ListNode node = new ListNode(-9999);
ListNode tmp = node;
while(list1 != null && list2 != null){
if(list1.val > list2.val){
tmp.next = list2;
list2 = list2.next;
}else{
tmp.next = list1;
list1 = list1.next;
}
tmp = tmp.next;
}
if(list1 != null)tmp.next = list1;
if(list2 != null)tmp.next = list2;
return node.next;
}
}