关于链表中temp节点是指向head节点还是head节点的下一个节点

在DoubleLinkedList类中处理链表时,初始化通常设置temp为头节点。在遍历或添加节点的while循环里,关键在于判断结束条件。temp.next == null表示到达链表末尾,而temp = null用于标记结束遍历。理解temp节点的指向对于正确操作链表至关重要。
摘要由CSDN通过智能技术生成
public class DoubleLinkedListDemo {
    public static void main(String[] args) {
        // 测试
        System.out.println("双向链表的测试");
        // 先创建节点
        HeroNode2 hero1 = new HeroNode2(1, "宋江", "及时雨");
        HeroNode2 hero2 = new HeroNode2(2, "卢俊义", "玉麒麟");
        HeroNode2 hero3 = new HeroNode2(3, "吴用", "智多星");
        HeroNode2 hero4 = new HeroNode2(4, "林冲", "豹子头");
        // 创建一个双向链表
        DoubleLinkedList doubleLinkedList = new DoubleLinkedList();
        doubleLinkedList.add(hero1);
        doubleLinkedList.add(hero2);
        doubleLinkedList.add(hero3);
        doubleLinkedList.add(hero4);

        doubleLinkedList.list();        
    }
}
//创建一个管理双向链表的类
class DoubleLinkedList{
    // 先初始化一个头节点, 头节点不要动, 不存放具体的数据
    private HeroNode2 head = new HeroNode2(0,"","");
    //返回头节点
    public HeroNode2 getHead(){
        return head;
    }

    //需求一&#x
编写一个删除循环链表节点的函数通常涉及到遍历链表并跟踪两个指针一个指针每次移动两步,一个指针每次移动一步。当找到循环链表的入口时,可以使用这两个指针来定位循环部分的起点,然后在非循环部分删除指定节点。 这里是一个基础的 C++ 示例,假设我们有一个 `Node` 类型,它包含一个整数值 `val` 和指向一个节点指针 `next`: ```cpp #include <iostream> using namespace std; // 定义链表节点 struct Node { int val; Node* next; bool isCycle; // 标记节点是否位于循环内 }; // 删除循环链表某个值的节点 void deleteInLoopList(Node*& head, const int target) { if (!head || !head->next) { // 如果链表为空或只有一个节点,直接返回 return; } Node* slow = head; Node* fast = head->next; Node* prev = nullptr; // 保存上一个节点 while (fast && fast != slow) { // 找到循环链表的入口 slow = slow->next; fast = fast->next->next; if (slow == fast) { break; } } // 如果不是循环链表,或者目标不在循环内,直接按常规删除 if (!slow || fast != slow || slow->val != target) { Node* temp = head; while (temp->next != slow) { prev = temp; temp = temp->next; } if (prev) { prev->next = temp->next; } else { head = temp->next; // 删除节点 } return; } // 否则,进入循环并删除目标节点 slow = slow->next; // 移动到循环内 prev = nullptr; while (slow->val != target) { prev = slow; slow = slow->next; } if (prev) { prev->next = slow->next; } else { head = slow->next; // 删除循环内的第一个目标节点 } } // 示例用法 int main() { // 创建一个简单的循环链表示例 Node* head = new Node{1}; head->next = new Node{2}; head->next->next = new Node{3}; head->next->next->next = head; // 设置循环 // 删除值为2的节点 deleteInLoopList(head, 2); // 打印链表 Node* cur = head; while (cur != nullptr) { cout << cur->val << " "; cur = cur->next; } return 0; } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值