如果要对一个单向链表进行遍历,且需要同时访问前一个和后一个节点,那么需要使用两个指针,而且不能使用相同的指针变量进行遍历。
当使用相同的指针变量进行遍历时,会出现遍历不完整的问题,因为在遍历当前节点之后会把指针移到下一个节点,这样就跳过了原本应该遍历的下一个节点。
下面是一个简单的单向链表遍历代码示例:
struct ListNode {
int data;
ListNode* next;
ListNode(int x) : data(x), next(NULL) {}
};
void traverseList(ListNode* head) {
ListNode* cur = head;
while (cur != NULL) {
// 遍历当前节点,访问 cur->data
cur = cur->next;
}
}
如果需要同时访问前一个和后一个节点,那么需要使用两个指针:
void traverseList(ListNode* head) {
ListNode* cur = head;
ListNode* pre = NULL;
while (cur != NULL) {
// 访问前一个节点 pre 和当前节点 cur
pre = cur;
cur = cur->next;
}
}