Leetcode(203)移除链表元素
class Solution {
public ListNode removeElements(ListNode head, int val) {
ListNode tempHead=new ListNode(1,head);
ListNode current=tempHead;
while (current!=null) {
while(current.next!=null&¤t.next.val==val){
current.next=current.next.next;
}
current=current.next;
}
return tempHead.next;
}
}
**LeetCode(707)设计链表
class ListNode {
int val;
ListNode next;
ListNode(){}
ListNode(int val) {
this.val=val;
}
}
class MyLinkedList {
//size存储链表元素的个数
int size;
//虚拟头结点
ListNode head;
//初始化链表
public MyLinkedList() {
size = 0;
head = new ListNode(0);
}
//获取第index个节点的数值,注意index是从0开始的,第0个节点就是头结点
public int get(int index) {
if(index<0||index>=size){
return -1;
}
ListNode currentNode=head;
for (int i = 0; i <index+1; i++) {
currentNode=currentNode.next;
}
return currentNode.val;
}
//在链表最前面插入一个节点,等价于在第0个元素前添加
public void addAtHead(int val) {
addAtIndex(0, val);
}
//在链表的最后插入一个节点,等价于在(末尾+1)个元素前添加
public void addAtTail(int val) {
addAtIndex(size, val);
}
// 在第 index 个节点之前插入一个新节点,例如index为0,那么新插入的节点为链表的新头节点。
// 如果 index 等于链表的长度,则说明是新插入的节点为链表的尾结点
// 如果 index 大于链表的长度,则返回空
public void addAtIndex(int index, int val) {
//判断插入位置是否合适
if(index>size)
{
return;
}
if(index<0)
{
index=0;
}
size++;
ListNode currListNode=head;
for (int i = 0; i < index; i++) {
currListNode=currListNode.next;
}
ListNode addNode=new ListNode(val);
addNode.next=currListNode.next;
currListNode.next=addNode;//按这个顺序,减少命名一个新变量空间
}
//删除第index个节点
public void deleteAtIndex(int index) {
//删除节点,首先进行判断一下
if(index<0||index>=size){
return;
}
ListNode deleListNode=head;
if(index==0){
head=head.next;
return;//涉及到头节点要单独拿出来考虑
}
for (int i = 0; i < index; i++) {
deleListNode=deleListNode.next;
}
deleListNode.next=deleListNode.next.next;
}
}
LeetCode(206)反转链表**
class Solution {
public ListNode reverseList(ListNode head) {
//使用双指针和临时指针保存变量进行遍历
ListNode pre=null;
ListNode cur=head;
ListNode temp=null;
while (cur!=null) {
temp=cur.next;//这部分断流保存
cur.next=pre;
pre=cur;
cur=temp;//因为cur.next一直再变化,所以需要一个temp作为存储用
}
return pre;
}
}