本题要求实现一个函数,将给定单向链表逆置,即表头置为表尾,表尾置为表头。链表结点定义如下:\n\nstruct listnode {\n int data;\n struct listnode *
时间: 2023-04-26 14:04:17 浏览: 99
实现链表逆置的函数,将链表的头节点变为尾节点,尾节点变为头节点。链表节点的定义如下:
struct listnode {
int data;
struct listnode *next;
};
实现函数的伪代码如下:
1. 定义三个指针:prev, curr, next,分别指向前一个节点、当前节点和下一个节点。
2. 将 curr 指向链表的头节点。
3. 将 prev 和 curr 都指向 NULL。
4. 循环遍历链表,直到 curr 指向 NULL。
5. 在循环中,将 next 指向 curr 的下一个节点。
6. 将 curr 的 next 指向 prev。
7. 将 prev 指向 curr。
8. 将 curr 指向 next。
9. 循环结束后,将链表的头节点指向 prev。
实现代码如下:
struct listnode* reverseList(struct listnode* head) {
struct listnode *prev = NULL, *curr = NULL, *next = NULL;
curr = head;
while (curr != NULL) {
next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
head = prev;
return head;
}
相关问题
本题要求实现一个函数,将给定单向链表逆置,即表头置为表尾,表尾置为表头。链表结点定义如下
链表结点定义如下:
```
struct ListNode {
int val;
ListNode *next;
ListNode(int x) : val(x), next(NULL) {}
};
```
实现函数如下:
```
ListNode* reverseList(ListNode* head) {
ListNode* prev = NULL;
ListNode* curr = head;
while (curr != NULL) {
ListNode* next = curr->next;
curr->next = prev;
prev = curr;
curr = next;
}
return prev;
}
```
该函数使用三个指针prev、curr和next,分别表示当前结点的前一个结点、当前结点和下一个结点。在循环中,将当前结点的next指针指向prev,然后将prev和curr向后移动一个结点,直到curr为NULL,此时prev指向原链表的最后一个结点,即逆置后的链表的头结点。
本题要求实现一个函数,将给定单向链表逆置,即表头置为表尾,表尾置为表头。链表结点定义如下: struct listnode { int data; struct listnode *next; };
实现链表逆置的函数,可以按照以下步骤进行:
1. 定义一个指向链表头结点的指针p,一个指向链表当前结点的指针q,一个指向链表前一个结点的指针pre。
2. 将p指向链表头结点,q指向链表头结点的下一个结点,pre指向NULL。
3. 依次遍历链表中的每个结点,将q的next指针指向pre,然后将pre指向q,q指向q的next。
4. 当q指向NULL时,说明已经遍历完整个链表,此时将链表头结点的next指针指向pre,即可完成链表逆置。
下面是具体的代码实现:
struct listnode* reverseList(struct listnode* head) {
struct listnode *p = head, *q = head->next, *pre = NULL;
while (q != NULL) {
p->next = pre;
pre = p;
p = q;
q = q->next;
}
p->next = pre;
head->next = p;
return head;
}
阅读全文