链表逆置 (20分)
发布日期:2021-05-08 02:55:42 浏览次数:13 分类:精选文章

本文共 1311 字,大约阅读时间需要 4 分钟。

单向链表逆转的实现思路如下:

要实现一个函数,将给定单向链表逆置,即将链表的头置为尾,尾置为头。链表的结点定义为:

int data;  
struct ListNode *next;
};```
函数接口定义为:
```struct ListNode *reverse( struct ListNode *head );```
其中,`head` 是用户传入的链表的头指针;函数 `reverse` 将链表 `head` 逆置,并返回结果链表的头指针。
### 逆转链表的思路
1. **初始化指针**:
- `older` 指针指向原链表的头节点。
- `newer` 指针初始化为 `NULL`,将用来构建新的逆转链表。
- `temp` 指针用于跟踪 `older` 指针的下一个节点。
2. **遍历链表**:
- 当 `older` 没有指向 `NULL` 时,进入循环。
- 将 `temp` 设置为 `older` 的下一个节点。
- 将 `older` 的下一个节点指向 `newer`,即 `older->next = newer`。
- 将 `newer` 指针设置为当前的 `older` 节点,即 `newer = older`。
- 将 `older` 移动到 `temp` 的位置,即 `older = temp`。
3. **返回结果**:
- 当循环结束时,`newer` 指针指向逆转后的链表的头节点。
### 代码实现
```c
struct ListNode *reverse(struct ListNode *head) {
struct ListNode *older = head;
struct ListNode *newer = NULL;
struct ListNode *temp = NULL;
while (older != NULL) {
temp = older->next;
older->next = newer;
newer = older;
older = temp;
}
return newer;
}

代码解释

  • 初始化指针

    • older 初始化为 head,即原链表的头节点。
    • newer 初始化为 NULL,用于构建新的逆转链表。
    • temp 用于跟踪 older 的下一个节点。
  • 循环处理

    • older 不为 NULL 时,执行循环。
    • temp 设置为 older 的下一个节点。
    • 使 older 的下一个节点指向 newer
    • newer 设置为当前的 older 节点。
    • 更新 oldertemp,继续处理下一个节点。
  • 返回

    • 循环结束后,newer 指针指向逆转后的链表的头节点,返回该指针。
  • 样例测试

    假设输入链表为:1→2→3→4→5→6→-1

    逆转后,链表变为:-1→6→5→4→3→2→1

    函数将正确处理这种情况,并返回逆转后的链表头节点。

    上一篇:史上最详细的Linux命令行与shell脚本编程手册 (收藏这篇就够了)
    下一篇:大力出奇迹之js文件爆破

    发表评论

    最新留言

    网站不错 人气很旺了 加油
    [***.192.178.218]2025年03月25日 06时02分01秒