如果你能读懂这段代码并能回答我的问题,那么你的链表就没有任何问题了!

问题:最后指针C是否有指向节点?如果有,那是一个怎样的节点?

 
# include <stdio.h>
struct LinkNode{
    int data;
    struct LinkNode *next;
};
 
void initLinkList(struct LinkNode *&L){
    struct LinkNode *p, *s;
    int num;
    L = new LinkNode;
    p = L;
    printf("初始化链表->每输入一个数需要用回车来结束该数输入,最后以Ctrl+Z结束输入。\n");
    while(scanf("%d", &num) != EOF){
        s = new LinkNode;
        s->data = num;
        p->next = s;
        p = s;
    }
    p->next = NULL;
}
void printLinkList(struct LinkNode *L){
    struct LinkNode *p = L->next;
    while(p){
        printf("%d\t", p->data);
        p = p->next;
    }
    printf("\n");
}
void destroyLinkList(struct LinkNode *&L){
    struct LinkNode *p;
    while(L){
        p = L->next;
        delete(L);
        L = p;
    }    
}
void mergeLinkList(struct LinkNode *L1, struct LinkNode *L2, struct LinkNode *&L3){
    struct LinkNode *p = L1->next, *q = L2->next, *r;
    L3 = L1;
    r = L3;
    while(p && q){
        if(p->data < q->data){
            r->next = p;
            r = p;
            p = p->next;
        }
        else{
            r->next = q;
            r = q;
            q = q->next;
        }
    }
    if(p == NULL){
        p = q;
    }
    r->next = p;
}
void reverseLinkList(struct LinkNode *L){
    struct LinkNode *r = NULL, *s = L->next, *p;
    L->next = NULL;
    while(s){
        p = s->next;
        s->next = r;
        r = s;
        s = p;
    } 
    L->next = r;
}
struct LinkNode * reverseLinkList2(struct LinkNode *L){
    struct LinkNode *p = L->next, *r;
    if(L->next == NULL){
        return L;
    }
    r = reverseLinkList2(p);
    p->next = L;
    L->next = NULL;
    return r;
}
void printLinkListByDiGui(struct LinkNode *L){
    struct LinkNode *p = L;
    while(p && p->next){
        printf("%d\t", p->data);
        p = p->next;
    }
}
int main(){
    struct LinkNode *A, *B, *C;
    struct LinkNode *D;
    initLinkList(A);
    printf("A链表>>>\n");
    printLinkList(A);
    initLinkList(B);
    printf("B链表>>>\n");
    printLinkList(B); 
    mergeLinkList(A, B, C);
    printf("合并>>>\n");
    printLinkList(C);    
    printf("逆置合并后的链表>>>\n");
    reverseLinkList(C);
    printLinkList(C);
    printf("再次逆置:\n");
    D = reverseLinkList2(C);
    printf("打印第二次逆置的链表:\n");
    printLinkListByDiGui(D);
    destroyLinkList(D);
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 当然可以!以下是一个简单的C++代码示例: ``` #include <iostream> using namespace std; //链表节点结构体 struct Node { int data; //节点数据 Node* next; //指向下一节点的指针 }; //链表类 class LinkedList { public: //构造函数 LinkedList() { head = NULL; } //在链表末尾插入节点 void Insert(int value) { Node* newNode = new Node; //创建新节点 newNode->data = value; //设置节点数据 newNode->next = NULL; //将节点的下一节点指针设置为空指针 //如果链表为空,将新节点设置为头节点 if (head == NULL) { head = newNode; return; } //否则,在链表末尾添加新节点 Node* temp = head; while (temp->next != NULL) { temp = temp->next; } temp->next = newNode; } //在链表中查找值为value的节点 Node* Search(int value) { Node* temp = head; while (temp != NULL) { if (temp->data == value) return temp; temp = temp->next; } return NULL; //如果找不到,返回空指针 } //从链表中删除值为value的节点 void Delete(int value) { //如果要删除的节点是头节点 if (head->data == value) { Node* temp = head; head = head->next; delete temp; return; } //否则,在链表中查找要删除的节点 Node* temp = head; while (temp->next != NULL) { if (temp->next->data == value) { Node* delNode = temp->next; temp->next = delNode->next; delete delNode; return; } temp = temp->next; } } private: Node* head; //头节点指针 }; //测试代码 int main() { LinkedList list; list.Insert(1); list.Insert(2); list.Insert(3); list.Insert(4); Node* node = list.Search(3); if (node != NULL) cout << node->data << endl; list.Delete(2); list.Delete(4); return 0; } ``` ### 回答2: 当然可以。以下是一个关于链表建立、插入、查询、删除的简单代码示例: ```python class Node: def __init__(self, data): self.data = data self.next = None class LinkedList: def __init__(self): self.head = None def insert(self, data): new_node = Node(data) if not self.head: self.head = new_node else: curr_node = self.head while curr_node.next: curr_node = curr_node.next curr_node.next = new_node def search(self, target): curr_node = self.head while curr_node: if curr_node.data == target: return True curr_node = curr_node.next return False def delete(self, target): if not self.head: return if self.head.data == target: self.head = self.head.next return curr_node = self.head while curr_node.next: if curr_node.next.data == target: curr_node.next = curr_node.next.next return curr_node = curr_node.next def display(self): curr_node = self.head while curr_node: print(curr_node.data, end=' ') curr_node = curr_node.next print() # 测试样例 my_list = LinkedList() my_list.insert(10) my_list.insert(20) my_list.insert(30) my_list.insert(40) my_list.display() # 输出:10 20 30 40 print(my_list.search(30)) # 输出:True print(my_list.search(50)) # 输出:False my_list.delete(30) my_list.display() # 输出:10 20 40 ``` 以上代码演示了如何建立一个简单的链表,并实现了插入、查询和删除操作。在插入操作中,如果链表为空,则直接将新节点设置为头节点;否则,找到最后一个节点,在其next指针处插入新节点。在查询操作中,遍历链表,如果找到目标值,则返回True;否则,返回False。在删除操作中,首先处理头节点的情况,如果头节点是目标值,则直接将头节点指向下一个节点;否则,在链表中找到目标节点的前一个节点,并将其next指针跳过目标节点。最后,通过display方法,遍历链表并输出其中的元素。 ### 回答3: 当然可以!以下是一个简单的链表的建立、插入、查询和删除的代码示例: ```python # 定义链表节点类 class ListNode: def __init__(self, val): self.val = val self.next = None # 创建链表 def createLinkedList(nums): dummy = ListNode(0) curr = dummy for num in nums: curr.next = ListNode(num) curr = curr.next return dummy.next # 在链表某个位置插入节点 def insertNode(head, pos, val): dummy = ListNode(0) dummy.next = head curr = dummy for _ in range(pos): curr = curr.next node = ListNode(val) node.next = curr.next curr.next = node return dummy.next # 查询链表中是否存在某个值 def searchValue(head, val): curr = head while curr: if curr.val == val: return True curr = curr.next return False # 删除链表中某个位置的节点 def deleteNode(head, pos): dummy = ListNode(0) dummy.next = head curr = dummy for _ in range(pos): curr = curr.next curr.next = curr.next.next return dummy.next # 测试代码 nums = [1, 2, 3, 4, 5] head = createLinkedList(nums) print("原链表:", end=" ") curr = head while curr: print(curr.val, end=" ") curr = curr.next head = insertNode(head, 2, 6) print("\n插入节点后的链表:", end=" ") curr = head while curr: print(curr.val, end=" ") curr = curr.next print("\n是否存在值为3的节点:", searchValue(head, 3)) head = deleteNode(head, 4) print("删除节点后的链表:", end=" ") curr = head while curr: print(curr.val, end=" ") curr = curr.next ``` 这只是一个简单的链表实现示例,帮助理解链表的基本操作。在实际开发中,可能需要根据具体需求进行更复杂的链表操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值