目录
问题:
1.链表的组成结构
2.如何改变倒数第N个结点
2.1 求链表长度
2.2 找到倒数第N个结点前一个结点
2.3 让倒数N前一个改变即可
3.源代码示范
问题:
1.链表的组成结构
单向链表 由value + next 组成 ,value包括此结点的各基础属性,next存储下一个结点地址
curr.next 代表curr结点指向的下一个结点,为2 ;
pre.next = curr.next 代表赋值 将curr下一个结点,作为pre的下一个结点
/** 如curr值为1 */
curr.next /** 代表curr结点指向的下一个结点,为2 */
curr.next.next /** curr.next指向的下一个结点,为3 */
2.如何改变倒数第N个结点
2.1 求链表长度
public int getSize(ListNode head){
ListNode temp = head;
int size = 0;
while (temp != null) {
size++;
//一定要好好想想,结尾是否要迭代指针
temp = temp.next;
}
return size;
}
2.2 找到倒数第N个结点前一个结点
int sz = getSize(head);
for(int i=1;i<sz-n;i++){
curr = curr.next;
}
2.3 让倒数N前一个改变即可
curr.next = curr.next.next;
3.源代码示范
class ListNode{
int val;
ListNode next;
ListNode(int value,ListNode next_one)
{
val = value;
next = next_one;
}
}
public class Solution {
public ListNode removeNthFromEnd(ListNode head,int n){
// ListNode dummy = new ListNode(0, head);
ListNode curr = head;
int sz = getSize(head);
for(int i=1;i<sz-n;i++){
curr = curr.next;
}
curr.next = curr.next.next;
//end必须在链表更新后,再获取头节点值
ListNode end = head;
return end;
}
public int getSize(ListNode head){
ListNode temp = head;
int size = 0;
while (temp != null) {
size++;
//一定要好好想想,结尾是否要迭代指针
temp = temp.next;
}
return size;
}
public void printNistNode(ListNode head){
ListNode curr = head;
while (curr != null) {
System.err.println(curr.val);
curr = curr.next;
}
}
}